1 #include<iostream> 2 #include<algorithm> 3 #include<cstring> 4 using std::cin; 5 using std::cout; 6 using std::max; 7 using std::min; 8 using std::endl; 9 10 bool c[2010][2010]; 11 int n, m; 12 int right[2010][2010], left[2010][2010], up[2010][2010]; 13 14 int main() 15 { 16 cin >> n >> m; 17 for (int i = 1; i <= n; i++) 18 { 19 for (int j = 1; j <= m; j++) 20 { 21 cin>> c[i][j]; 22 23 left[i][j] = j; 24 25 right[i][j] = j; 26 27 up[i][j] = 1; 28 } 29 } 30 for (int i = 1; i <= n; i++) 31 for (int j = 2; j <= m; j++) 32 if (c[i][j] != c[i][j - 1]) 33 left[i][j] = left[i][j - 1]; 34 for (int i = 1; i <= n; i++) 35 for (int j = m - 1; j > 0; j--) 36 if (c[i][j] != c[i][j + 1]) 37 right[i][j] = right[i][j + 1]; 38 int maxs1 = -0x3f3f3f3f; 39 int maxs2 = -0x3f3f3f3f; 40 for (int i = 1; i <= n; i++) 41 { 42 for (int j = 1; j <= m; j++) 43 { 44 if (i > 1 && c[i][j] != c[i - 1][j]) 45 46 { 47 left[i][j] = max(left[i][j], left[i - 1][j]); 48 49 right[i][j] = min(right[i][j], right[i - 1][j]); 50 51 up[i][j] = up[i - 1][j] + 1; 52 } 53 int a = right[i][j] - left[i][j] + 1; 54 int b = min(a, up[i][j]); 55 56 maxs1 = max(maxs1, b * b); 57 58 maxs2 = max(maxs2, a * up[i][j]); 59 60 } 61 } 62 cout << maxs1 << endl; 63 cout << maxs2; 64 }
原文:https://www.cnblogs.com/thjkhdf12/p/11641154.html