Submission #1161990

#TimeUsernameProblemLanguageResultExecution timeMemory
1161990PieArmyBomb (IZhO17_bomb)C++20
90 / 100
347 ms74664 KiB
#include <bits/stdc++.h> typedef long long ll; using namespace std; int n,m; int table[2523][2523],ust[2523][2523],alt[2523][2523],mx; int mn[2523]; int ans=0; void cal(){ for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(table[i][j]!=0&&table[i][j-1]==0){ int a=ust[i][j],b=alt[i][j]; for(int l=j;l<=m;l++){ if(table[i][l]==0)break; a=max(a,ust[i][l]); b=min(b,alt[i][l]); mn[l-j+1]=min(mn[l-j+1],b-a+1); } } } } } int main(){ ios_base::sync_with_stdio(false);cin.tie(NULL); cin>>n>>m; for(int &x:mn) x=n; mx=m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ char c;cin>>c; table[i][j]=c-'0'; if(table[i][j]){ table[i][j]=table[i][j-1]+1; } else if(table[i][j-1])mx=min(mx,table[i][j-1]); } if(table[i][m])mx=min(mx,table[i][m]); } for(int j=1;j<=m;j++){ int x=n; for(int i=1;i<=n;i++){ if(table[i-1][j]==0){ ust[i][j]=i; } else ust[i][j]=ust[i-1][j]; //if(table[i][j]&&table[i+1][j]==0)x=min(x,i-ust[i][j]+1); } for(int i=n;i>=1;i--){ if(table[i+1][j]==0){ alt[i][j]=i; } else alt[i][j]=alt[i+1][j]; } for(int i=1;i<=mx;i++){ mn[i]=min(mn[i],x); } } cal(); for(int i=1;i<=n;i++){ reverse(table[i]+1,table[i]+m+1); reverse(ust[i]+1,ust[i]+m+1); reverse(alt[i]+1,alt[i]+m+1); } cal(); for(int i=1;i<=mx;i++){ ans=max(ans,i*mn[i]); } cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...