제출 #833280

#제출 시각아이디문제언어결과실행 시간메모리
833280vjudge1Bomb (IZhO17_bomb)C++17
24 / 100
311 ms49372 KiB
#include <bits/stdc++.h>
using namespace std;

int n, m;
const int maxn = 2504;
int chainw[maxn][maxn];
int chainh[maxn][maxn];

int getParentW(int i, int j) {
    if (chainw[i][j+1] != 0) return getParentW(i, j+1);
    return j;
}

int getParentH(int i, int j) {
    if (chainh[i+1][j] != 0) return getParentH(i+1, j);
    return i;
}

int main() {
    cin >> n >> m;

    int all0 = true;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            char x;
            cin >> x;
            if (x == '1') {
                all0 = false;
                chainw[i][j] = chainw[i][j-1]+1;
                chainh[i][j] = chainh[i-1][j]+1;
            }
        }
    }

    if (all0) {
        cout << 0 << endl;
        return 0;
    }

    int maxpossiblew = maxn;
    int maxpossibleh = maxn;

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            j = getParentW(i, j);
            if (chainw[i][j] == 0) continue;
            maxpossiblew = min(maxpossiblew, chainw[i][j]);
        }
        // if (maxw[i] == 0) continue;
        // maxpossiblew = min(maxpossiblew, chainw[i][maxw[i]]);
    }

    for (int j = 1; j <= m; j++) {
        for (int i = 1; i <= n; i++) {
            i = getParentH(i, j);
            if (chainh[i][j] == 0) continue;
            maxpossibleh = min(maxpossibleh, chainh[i][j]);
        }
        // if (maxw[i] == 0) continue;
        // maxpossiblew = min(maxpossiblew, chainw[i][maxw[i]]);
    }

    cout << maxpossibleh * maxpossiblew << endl;

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...