# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
885315 | alexdd | Bomb (IZhO17_bomb) | C++17 | 337 ms | 55636 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<iostream>
using namespace std;
int n,m;
char mat[2505][2505];
int sump[2505][2505];
int mars[2505][2505];
bool verif(int cntx, int cnty)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
mars[i][j]=0;
for(int i=1;i+cntx-1<=n;i++)
{
for(int j=1;j+cnty-1<=m;j++)
{
if(sump[i+cntx-1][j+cnty-1] - sump[i+cntx-1][j-1] - sump[i-1][j+cnty-1] + sump[i-1][j-1] == cntx*cnty)///toate is 1
{
mars[i][j]++;
mars[i][j+cnty]--;
mars[i+cntx][j]--;
mars[i+cntx][j+cnty]++;
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
mars[i][j] += mars[i-1][j] + mars[i][j-1] - mars[i-1][j-1];
if(mars[i][j]==0 && mat[i][j]=='1')
return 0;
}
}
return 1;
}
signed main()
{
cin>>n>>m;
int minx=n,miny=m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>mat[i][j];
sump[i][j] = sump[i-1][j] + sump[i][j-1] - sump[i-1][j-1];
if(mat[i][j]=='1')
sump[i][j]++;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(mat[i][j]=='1' && (j==m || mat[i][j+1]=='0'))
{
int cnt=0;
for(int u=j;u>0;u--)
{
if(mat[i][u]=='0')
break;
cnt++;
}
miny = min(miny, cnt);
}
}
}
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
if(mat[j][i]=='1' && (j==n || mat[j+1][i]=='0'))
{
int cnt=0;
for(int u=j;u>0;u--)
{
if(mat[u][i]=='0')
break;
cnt++;
}
minx = min(minx, cnt);
}
}
}
if(1LL*minx * miny * n * m > 200000000)
{
cout<<minx*miny;
return 0;
}
//minx=n;miny=m;
int poz=0, mxm=0;
for(int i=minx;i>0;i--)
{
if(i*miny <= mxm)
break;
while(poz+1<=miny && verif(i,poz+1))
{
poz++;
}
mxm = max(mxm, i*poz);
}
cout<<mxm;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |