Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define F first
- #define S second
- #define PB push_back
- #define MP make_pair
- #define MAXN 1001
- #define MOD 100000007
- using namespace std;
- typedef vector<int> vi;
- typedef pair<int,int> ii;
- typedef vector<ii> vii;
- typedef long long ll;
- int n,m;
- char mat[MAXN][MAXN];
- int rep[MAXN][MAXN];
- void build(){
- for(int i = 0; i < n; i++){
- for(int j = 0; j < m; j++){
- scanf(" %c", &mat[i][j]);
- }
- }
- for(int i = 0; i < n; i++){
- rep[i][0] = 1;
- for(int j = 1; j < m; j++){
- if(mat[i][j] != mat[i][j-1])
- rep[i][j] = 1;
- else
- rep[i][j] = rep[i][j-1] + 1;
- }
- }
- // for(int i = 0; i < n ; i++){
- // for(int j = 0; j < m; j++){
- // printf("%d ", rep[i][j]);
- // }
- // printf("\n");
- // }
- }
- bool check(int k){
- int c = 0;
- for(int i = 0; i < n; i++){
- c = 0;
- for(int j = 0; j < m; j++){
- if(rep[j][i] >= k)
- c++;
- else
- c = 0;
- if(c == k)
- break;
- }
- if( c == k )
- break;
- }
- return c == k;
- }
- int main(){
- scanf("%d %d", &n ,&m);
- build();
- int l = 1; int r = max(n,m);
- while(l < r){
- int k = l + (r-l)/2;
- if(check(k)){
- l = k+1;
- }else{
- r = k - 1;
- }
- }
- if(!check(l))
- l--;
- cout << l*l << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement