제출 #1258398

#제출 시각아이디문제언어결과실행 시간메모리
1258398TAhmed33Bomb (IZhO17_bomb)C++20
0 / 100
2 ms324 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
/*
0011
0011
1110
1100
*/
void solve (int X) {
	int n, m; cin >> n >> m;
	vector <vector <char>> a(n + 1, vector <char> (m + 1));
	vector <vector <int>> up(n + 1, vector <int> (m + 1, 0));
	vector <vector <int>> down(n + 2, vector <int> (m + 1, 0));
	vector <vector <int>> f(n + 2, vector <int> (m + 1, 0));
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			cin >> a[i][j];
		}
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			up[i][j] = (a[i][j] == '0' ? 0 : 1 + up[i - 1][j]);
		}
	}
	for (int i = n; i >= 1; i--) {
		for (int j = 1; j <= m; j++) {
			down[i][j] = (a[i][j] == '0' ? 0 : 1 + down[i + 1][j]);
		}
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			f[i][j] = up[i][j] + down[i][j] - 1;
		}
	}
	int dx = n, dy = m;
	for (int i = 1; i <= n; i++) {
		int cnt = 0;
		for (int j = 1; j <= m; j++) {
			if (a[i][j] == '1') {
				cnt++;
			} else if (cnt > 0) {
				dy = min(dy, cnt);
				cnt = 0;
			}
		}
		if (cnt > 0) {
			dy = min(dy, cnt);
			cnt = 0;
		}
	}
	for (int j = 1; j <= m; j++) {
		int cnt = 0;
		for (int i = 1; i <= n; i++) {
			if (a[i][j] == '1') {
				cnt++;
			} else if (cnt > 0) {
				dx = min(dx, cnt);
				cnt = 0;
			}
		}
		if (cnt > 0) {
			dx = min(dx, cnt);
			cnt = 0;
		}
	}
	int ans = 0;
	for (int c = 1; c <= dx; c++) {
		vector <vector <int>> marked(n + 1, vector <int> (m + 1, 0));
		int mn = dy;
		for (int i = 1; i <= n; i++) {
			for (int j = 1; j <= m; j++) {
				if (a[i][j] == '0') {
					continue;
				}
				if (marked[i][j]) {
					continue;
				}
				int k = j;
				while (k + 1 <= m && down[i][k + 1] >= c) {
					k++;
				}
				mn = min(mn, k - j + 1);
				for (int l = j; l <= k; l++) {
					for (int m = i; m <= i + c - 1; m++) {
						marked[m][l] = 1;
					}
				}
			}
		}
		ans = max(ans, c * mn);
	}
	cout << ans << '\n';
}	
signed main () {
	#ifndef ONLINE_JUDGE 
		freopen("input_file", "r", stdin);
		//freopen("output_file", "w", stdout);
	#endif
	ios::sync_with_stdio(0); cin.tie(0);
	int tc = 1; cin >> tc;
	for (int i = 1; i <= tc; i++) solve(i);
}

컴파일 시 표준 에러 (stderr) 메시지

bomb.cpp: In function 'int main()':
bomb.cpp:97:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   97 |                 freopen("input_file", "r", stdin);
      |                 ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...