/Bàn cờ tướng

<Problem>

https://oj.vnoi.info/problem/bchess
              #include <iostream>
      using namespace std;
      
      #define MAX 2001
      
      int main() {
        int n;
        cin >> n;
      
        char ch[MAX][MAX];
      
        for (int i = 1; i <= n; i++) {
          for (int j = 1; j <= n; j++) {
            cin >> ch[i][j];
          }
        }
      
        int f[MAX][MAX];
      
        for (int i = 1; i <= n; i++) {
          f[1][i] = 1;
          f[i][1] = 1;
        }
      
        int m1 = 0, m2 = 0, m3 = 0;
        int c1 = 0, c2 = 0, c3 = 0;
      
      
        // 1 - den, 0 - trang
        for (int i = 2; i <= n; i++) {
          for (int j = 2; j <= n; j++) {
            if (ch[i - 1][j - 1] == ch[i][j] && ch[i - 1][j] != ch[i][j]
              && ch[i][j - 1] != ch[i][j])
              f[i][j] = min(min(f[i - 1][j - 1], f[i - 1][j]), f[i][j - 1]) + 1;
            else f[i][j] = 1;
            if (ch[i][j] == '1' && m2 < f[i][j] - 1 + f[i][j] % 2) {
              m2 = f[i][j] - 1 + f[i][j] % 2;
            }
      
            if (ch[i][j] == '0' && m3 < f[i][j] - 1 + f[i][j] % 2) {
              m3 = f[i][j] - 1 + f[i][j] % 2;
            }
      
            if (m1 < f[i][j] - f[i][j] % 2) {
              m1 = f[i][j] - f[i][j] % 2;
            }
          }
        }
      
        for (int i = 1; i <= n; i++) {
          for (int j = 1; j <= n; j++) {
            if (m1 != 0 && m1 <= f[i][j]) c1++;
            if (m2 != 0 && ch[i][j] == '1' && m2 <= f[i][j]) c2++;
            if (m3 != 0 && ch[i][j] == '0' && m3 <= f[i][j]) c3++;
          }
        }
      
        cout << m1 << " " << c1 << endl;
        cout << m2 << " " << c2 << endl;
        cout << m3 << " " << c3 << endl;
      
      
        return 0;
      }