Submission #1128534

#TimeUsernameProblemLanguageResultExecution timeMemory
1128534erasyl123Bomb (IZhO17_bomb)C++20
7 / 100
1101 ms105300 KiB
#include <bits/stdc++.h> #define int long long #define boost ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); using namespace std; const int N = 2505; const int inf = 1e9; const int mod=1e9+7; struct edge{ int pos,val,t; }; int dp[N][N]; string c[N]; int dp1[N][N]; int n,m; vector<pair<int,int> >v[N]; int ch(int i, int j){ int ok=0; int cnt=0; for(int y=1;y+i-1<=n;y++){ for(int x=1;x+j-1<=m;x++){ int x1=x+(j-1); int y1=y+(i-1); int cnt=dp[y1][x1]-dp[y1][x - 1]-dp[y - 1][x1]+dp[y - 1][x - 1]; if(cnt==i*j){ dp1[y][x]++; dp1[y1+1][x]--; dp1[y][x1+1]--; dp1[y1+1][x1+1]++; } } } int cnt1=0; for(int y=1;y<=n;y++){ for(int x=1;x<=m;x++){ dp1[y][x]+=dp1[y-1][x]+dp1[y][x-1]-dp1[y-1][x-1]; if(dp1[y][x]>0){ cnt1++; } } } if(cnt1==dp[n][m]){ ok=1; } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ dp1[i][j]=0; } } return ok; } signed main(){ //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); boost cin>>n>>m; for(int i=1;i<=n;i++){ cin>>c[i]; for(int j=0;j<m;j++){ int x=0; if(c[i][j]=='1'){ x=1; } dp[i][j+1]=dp[i-1][j+1]+dp[i][j]-dp[i-1][j]+x; } } int mx = 1, mx1 = 1; for(int i = 1; i <= n; i++) { int cnt = 0; for(int j = 0; j < m; j++) { if(c[i][j] == '1')cnt ++; else if(c[i][j] == '0') { if(j > 0 && c[i][j - 1] == '1')mx = max(mx, cnt); cnt = 0; } } if(c[i][m - 1] == '1')mx = max(mx, cnt); } for(int j = 0; j < m; j++) { int cnt = 0; for(int i = 1; i <= n; i++) { if(c[i][j] == '1')cnt ++; else if(c[i][j] == '0') { if(i > 1 && c[i - 1][j] == '1')mx1 = max(mx1, cnt); cnt = 0; } } if(c[n][j] == '1')mx1 = max(mx1, cnt); } int ans = 1; for(int i=1;i<=2500;i++){ if(i > mx1)break; for(int j=1;j<=i;j++){ if(i%j==0){ if((i / j) > mx)continue; if(ch(i, i / j))ans = max(ans, i * (i / j)); } } } cout << ans << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...