TCO11 Qual3 Hard(1000) ComplementMachine2D
00 01 01 11
このようになっていたら、この4マス全部が消去可能な部分マトリックスに含まれることはない。各部分マトリックスについて、このような4マスを含まないかどうか調べる。
#include <string> #include <vector> using namespace std; class ComplementMachine2D{public: int largestSubmatrix( vector <string> matrix ) { int N = (int)matrix.size(); int M = (int)matrix[0].size(); vector<vector<bool> > F( N, vector<bool>(M) ); for ( int y=0; y<N-1; y++ ) for ( int x=0; x<M-1; x++ ) { int c = (matrix[y ][x ]-'0') + (matrix[y+1][x ]-'0') + (matrix[y ][x+1]-'0') + (matrix[y+1][x+1]-'0'); F[y][x] = c!=1 && c!=3; } int ans = 0; for ( int y1=0; y1<N; y1++ ) for ( int y2=y1; y2<N; y2++ ) for ( int x1=0; x1<M; x1++ ) for ( int x2=x1; x2<M; x2++ ) { bool f = true; for ( int y=y1; y<y2 && f; y++ ) for ( int x=x1; x<x2 && f; x++ ) if ( ! F[y][x] ) f = false; if ( f ) ans = max( ans, (y2-y1+1)*(x2-x1+1) ); } return ans; }};