Rezolvare completă PbInfo #3296 convert_submatrix

Cerința

Considerăm codificarea binară a caracterelor, în care fiecărui simbol îi revine reprezentarea pe 8 biți a codului său ASCII. De exemplu, caracterului ’A’, având codul ASCII 65, îi va corespunde reprezentarea binară 01000001.

Scrieți un program care citește din fișierul convert_submatrix.in un șir s format din n ≤ 100 caractere și construiește o matrice M cu n linii și 8 coloane, linia i a matricii reprezentând codificarea binară a caracterului de pe poziția i din șir. Se cere determinarea dimensiunii celei mai mari submatrice pătratice a lui M, care conține elemente cu aceeași valoare (fie 0, fie 1). Valoarea determinată se scrie în fișierul convert_submatrix.out.

Date de intrare

Fișierul de intrare convert_submatrix.in conține pe prima linie șirul s format din cel mult 100 de caractere.

Date de ieșire

Fișierul de ieșire convert_submatrix.out va conține pe prima linie numărul rez, reprezentând dimensiunea celei mai mari submatrici pătratice a lui m conținând elemente cu aceeași valoare (fie 0, fie 1).

Restricții și precizări

  • lungimea șirului: 1 ≤ n ≤ 100
  • șirul poate să conțină: ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789 `~,./;:][}{+_=-|!#$%^&*()

Exemplul 1:

convert_submatrix.in

IDEEA

convert_submatrix.out

3

Explicație

Matricea corespunzătoare șirului citit este:

\begin{pmatrix}
0&1&0&0&1&0&0&1\\
0&1&0&0&0&1&0&0\\
0&1&0&0&0&1&0&1\\
0&1&0&0&0&1&0&1\\
0&1&0&0&0&0&0&1
\end{pmatrix}

Se observă că dimensiunea celei mai mari submatrici pătratice a lui m conținând elemente cu aceeași valoare este 3.

Exemplul 2:

convert_submatrix.in

AAAyyyy

convert_submatrix.out

4

Explicație

Matricea corespunzătoare șirului citit este:

\begin{pmatrix}
0&1&0&0&0&0&0&1\\
0&1&0&0&0&0&0&1\\
0&1&0&0&0&0&0&1\\
0&1&1&1&1&0&0&1\\
0&1&1&1&1&0&0&1\\
0&1&1&1&1&0&0&1\\
0&1&1&1&1&0&0&1\\
\end{pmatrix}

Se observă că dimensiunea celei mai mari submatrici pătratice a lui m conținând elemente cu aceeași valoare este 4.

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema convert_submatrix:

#include <bits/stdc++.h>
using namespace std;
#define smax 101
ifstream f("convert_submatrix.in");
ofstream g("convert_submatrix.out");
char sir[smax];
bool matrice[smax][8];
void conversie_c(char c, bool binar[8])
{
    int i;
    for (i = 0; i < 8; i++)
        binar[7 - i] = c & (1 << i);
}
void conversie_sir(char* s, bool binar[smax][8])
{
    int i;
    for (i = 0; s[i]; i++)
        conversie_c(s[i], binar[i]);
}
int mini(int x, int y, int z)
{
    int mi=x;
    if(y<mi)
        mi=y;
    if(z<mi)
        mi=z;
    return mi;
}

int maxi(int x, int y, int z)
{
    int ma=x;
    if(y>ma)
        ma=y;
    if(z>ma)
        ma=z;
    return ma;
}

int submatrice(int nrl, int nrc, bool m[smax][8])
{
    int i, j, rez = 1;
    int a[smax][8], b[smax][8];
     for (i = 1; i < nrl; i++)
    {
        a[i][0] = !m[i][0];
        b[i][0] = m[i][0];
    }
    for (j = 0; j < nrc; j++)
    {
        a[0][j] = !m[0][j];
        b[0][j] = m[0][j];
    }
    for (i = 1; i < nrl; i++)
        for (j = 1; j < nrc; j++)
        {
            a[i][j] = (m[i][j] ? 0 : mini(a[i - 1][j], a[i][j - 1], a[i - 1][j - 1]) + 1);
            b[i][j] = (m[i][j] ? mini(b[i - 1][j], b[i][j - 1], b[i - 1][j - 1]) + 1 : 0);
            rez = maxi(rez, a[i][j], b[i][j]);
        }
    return rez;
}
int main()
{
    f.get(sir,100);
    conversie_sir(sir, matrice);
    g<<submatrice(strlen(sir),8,matrice);
    f.close();g.close();
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #3296 convert_submatrix

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #3296 convert_submatrix de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!