제출 #915529

#제출 시각아이디문제언어결과실행 시간메모리
915529vjudge1Bomb (IZhO17_bomb)C++17
29 / 100
1042 ms51296 KiB
/*#pragma GCC optimize("Ofast") #pragma GCC target("avx,avx2,fma") #pragma GCC optimization("unroll-loops") #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")*/ #include <bits/stdc++.h> #include <iomanip> #define ll long long #define pb push_back #define mp make_pair #define ff first #define ss second #define str string #define pii pair<int,int> #define sz(x) x.size() #define all(x) x.begin(), x.end() #define vi vector<int> #define mii map<int,int> #define mll map<ll,ll> #define yes cout<<"YES\n"; #define no cout<<"NO\n"; #define yess cout<<"Yes\n"; #define noo cout<<"No\n"; using namespace std; int pp[101][101]; int u[101][101]; void solve(){ int n,m; cin>>n>>m; if(n==1){ str s; cin>>s; vector<int >v; int k=0; for(int i=0;i<m;i++){ if(s[i]=='1')k++; else{ if(k>0){ v.pb(k); k=0; } } } if(k>0){ v.pb(k); } int ans=1; if(v.size()==0){ cout<<0; return; } for(int i=2;i<=m;i++){ k=1; for(int j=0;j<(int)v.size();j++){ if(v[j]<i){ k=0; break; } } if(k==1){ ans=i; } } cout<<ans; } else if(m==1){ char s; vector<int >v; int k=0; for(int i=0;i<n;i++){ cin>>s; if(s=='1')k++; else{ if(k>0){ v.pb(k); k=0; } } } if(k>0){ v.pb(k); } int ans=1; if(v.size()==0){ cout<<0; return; } for(int i=2;i<=n;i++){ k=1; for(int j=0;j<(int)v.size();j++){ if(v[j]<i){ k=0; break; } } if(k==1){ ans=i; } } cout<<ans; } else{ str s[n+3]; int a[n+3][m+3]; int o=0; for(int i=1;i<=n;i++){ cin>>s[i]; for(int j=0;j<m;j++){ a[i][j+1]=s[i][j]-'0'; o+=(a[i][j]==1); pp[i][j+1]=a[i][j+1]+pp[i][j]+pp[i-1][j+1]-pp[i-1][j]; } } if(o==0){ cout<<0; return; } int ans=0; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(i*j<=ans){ continue; } for(int i1=1;i1<=n;i1++){ for(int j1=1;j1<=m;j1++){ u[i1][j1]=0; } } for(int i1=1;i1<=n;i1++){ for(int j1=1;j1<=m;j1++){ if(i1+i-1>n || j1+j-1>m)continue; if(pp[i1+i-1][j1+j-1]+pp[i1-1][j1-1]-pp[i1+i-1][j1-1]-pp[i1-1][j1+j-1]==i*j){ for(int i2=i1;i2<=i1+i-1;i2++){ for(int j2=j1;j2<=j1+j-1;j2++){ u[i2][j2]=1; } } } } } int k=1; for(int i1=1;i1<=n;i1++){ for(int j1=1;j1<=m;j1++){ if(u[i1][j1]!=a[i1][j1]){ k=0; break; } } } if(k==1){ /*cout<<i<<" "<<j<<"\n"; for(int i1=1;i1<=n;i1++){ for(int j1=1;j1<=m;j1++){ cout<<u[i1][j1]; } cout<<"\n"; }//*/ ans=max(ans,i*j); } } } cout<<ans; } } signed main(){ //ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0); //srand( time(0)); //rand() //freopen("sum.in", "r", stdin); //freopen("sum.out", "w", stdout); int tests=1; //cin>>tests; for(int i=1;i<=tests;i++){ //cout<<"TEST CASE : "<<i<<"\n"; solve(); } }
#Verdict Execution timeMemoryGrader output
Fetching results...