Submission #88181

#TimeUsernameProblemLanguageResultExecution timeMemory
88181dimash241Bomb (IZhO17_bomb)C++14
24 / 100
693 ms31876 KiB
# include <stdio.h>
# include <bits/stdc++.h>


#define _USE_MATH_DEFINES_
#define ll long long
#define ld long double
#define Accepted 0
#define pb push_back
#define mp make_pair
#define sz(x) (int)(x.size())
#define every(x) x.begin(),x.end()
#define F first
#define S second
#define For(i,x,y)  for (int i = x; i <= y; i ++) 
#define FOr(i,x,y)  for (int i = x; i >= y; i --)
#define SpeedForce ios_base::sync_with_stdio(0), cin.tie(0)
// ROAD to...                                                                                                                                                                                                                Red

using namespace std;

inline bool isvowel (char c) {
	c = tolower(c);
    if (c == 'a' || c == 'e' || c == 'i' || c == 'y' || c == 'o' || c == 'u') return 1;
    return 0;
}

const double eps = 0.000001;
const ld pi = acos(-1);
const int maxn = 1e7 + 9;
const int mod = 1e9 + 7;
const ll MOD = 1e18 + 9;
const ll INF = 1e18 + 123;
const int inf = 2e9 + 11;
const int mxn = 1e6 + 9;
const int N = 6e5 + 123;                                          
const int M = 22;
const int pri = 997;
const int Magic = 2101;

const int dx[] = {-1, 0, 1, 0};
const int dy[] = {0, -1, 0, 1};
 
short n, m;
bool a[2530][2530];
short l[2530][2530];
short r[2530][2530];
int f[2503];

int main () {
	SpeedForce;                                                      
	cin >> n >> m;
	int ans = 0;
   	int w = inf, h = inf;
   	
	For (i, 1, n) {
		For (j, 1, m) {
			char c;
			cin >> c;
			a[i][j] = c - '0';
			if (a[i][j] == 0) l[i][j] = j;
			else l[i][j] = l[i][j - 1];
		}
		r[i][m + 1] = m + 1;    		
		FOr(j, m, 1) {
			if (a[i][j] == 0) r[i][j] = j;
			else {
				r[i][j] = r[i][j + 1];
				w = min(w, (int)r[i][j] - l[i][j] - 1);
			}
		}
	}        

	For (j, 1, m) {
		For (i, 1, n) {
			if (a[i][j] == 0) l[i][j] = i;
			else l[i][j] = l[i - 1][j];
		}
		r[n + 1][j] = n + 1;
		FOr(i, n, 1) {
			if (a[i][j] == 0) r[i][j] = i;
			else {
				r[i][j] = r[i + 1][j];
				h = min(h, (int) r[i][j] - l[i][j] - 1);
			}
		}
	}

	For (i, 1, w) f[i] = h;
	For (i, 1, n) {
		int cur = 0;
		For (j, 1, m) {
			if (a[i][j] == 0) cur =0;
			else {
				cur ++;
				f[cur] = min(f[cur], r[i][j] - l[i][j] - 1);
			}
		}
	}

	For (i, 1, w) ans = max(ans, f[i] * i);

	cout << ans;

    return Accepted;
}

// Coded By OB
#Verdict Execution timeMemoryGrader output
Fetching results...