제출 #404483

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

int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);

  int N, M;
  cin >> N >> M;

  vector<vector<int>> A(N, vector<int>(M));
  for (int i = 0; i < N; i++) {
    for (int j = 0; j < M; j++) {
      char c;
      cin >> c;
      A[i][j] = c - '0';
    }
  }

  const auto Solve = [&](const vector<vector<int>> &A) {
    vector<vector<int>> H, V;
    H.assign(N, vector<int>(M, 0));
    V.assign(N, vector<int>(M, 0));

    for (int i = 0; i < N; i++) {
      for (int j = 0; j < M; j++) if (A[i][j] == 1) {
        int jj = j;
        while (jj + 1 < M && A[i][jj + 1] == 1) jj += 1;
        for (int k = j; k <= jj; k++) {
          H[i][k] = jj - j + 1;
        }
        j = jj;
      }
    }

    for (int j = 0; j < M; j++) {
      for (int i = 0; i < N; i++) if (A[i][j] == 1) {
        int ii = i;
        while (ii + 1 < N && A[ii + 1][j] == 1) ii += 1;
        for (int k = i; k <= ii; k++) {
          V[k][j] = ii - i + 1;
        }
        i = ii;
      }
    }

    return pair(H, V);
  };

  auto [H, V] = Solve(A);

  int ansN = N;
  int ansM = M;

  for (int i = 0; i < N; i++) {
    for (int j = 0; j < M; j++) if (A[i][j] != 0) {
      ansN = min(ansN, V[i][j]);
      ansM = min(ansM, H[i][j]);
    }
  }

  cout << ansN * ansM << '\n';
  return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...