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
. Astfel, un cuvânt C
poate fi reprezentat binar, sub forma unui tablou bidimensional, în care fiecare linie i
a tabloului reprezintă codificarea binară a literei de pe poziţia i
din C
, tabloul având în final atâtea linii câte litere are cuvântul, şi 8
coloane.. Submatricea pătratică de dimensiune maximă este cea cu elementele subliniate.
#include <bits/stdc++.h> using namespace std; int a[101][9]; bool areamax(int i , int j , int x , int y) { for(int c = i ; c <= x ; ++c) for(int d = j ; d <= y ; ++d) if(a[c][d]!=a[i][j]) return 0; return 1; } int main() { char s[101]; cin >> s; int i = 0; while(s[i]!='\0') { int nr=(int)s[i]; int j=0; while(nr) { a[i][j]=nr%2; nr/=2; j++; } i++; } int max=0; int x , y , z , t; //for(int j = 0 ; j < i ; ++j) //{ // for(int k = 0 ; k < 8 ; ++k) // cout << a[j][k] << ' '; // cout << endl; //} for(int j = 0 ; j < i ; ++j) { for(int k = 0 ; k < 8 ; ++k) { for(int q = 1 ; q + j < i && k + q < 8 ; ++q) if(areamax(j , k , j + q , k + q)) if(q > max) max=q , x = j , y = k , z = j+q , t=k+q; } } cout << max+1; //cout << endl << x << ' ' << y << ' ' << z << ' ' << t; }