Submission #885633

# Submission time Handle Problem Language Result Execution time Memory
885633 2023-12-10T10:37:58 Z alexdd Bomb (IZhO17_bomb) C++17
70 / 100
1000 ms 58028 KB
#include<iostream>
using namespace std;
int n,m;
char mat[2505][2505];
int sump[2505][2505];
int mars[2505][2505];
int pver[2505][2505];
bool verif(int cntx, int cnty)
{
    if(pver[cntx][cnty]!=0)
    {
        if(pver[cntx][cnty]==-1)
            return 0;
        else
            return 1;
    }
    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]++;
            }
            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')
            {
                pver[cntx][cnty]=-1;
                return 0;
            }
        }
    }
    pver[cntx][cnty]=1;
    return 1;
}
void solve_n3_y(int minx, int miny)
{
    int poz=0, mxm=0;
    for(int i=minx;i>0;i--)
    {
        if(i*miny <= mxm)
            break;
        poz = max(poz, (mxm-1)/i+1);
        while(poz+1<=miny && verif(i,poz+1))
        {
            poz++;
        }
        if(verif(i,poz)) mxm = max(mxm, i*poz);
    }
    cout<<mxm;
}
void solve_n3_x(int minx, int miny)
{
    int poz=0, mxm=0;
    for(int i=miny;i>0;i--)
    {
        if(i*minx <= mxm)
            break;
        poz = max(poz, (mxm-1)/i+1);
        while(poz+1<=minx && verif(poz+1,i))
        {
            poz++;
        }
        if(verif(poz,i)) mxm = max(mxm, i*poz);
    }
    cout<<mxm;
}
void solve_bulaneala(int minx, int miny)
{
    int mxm=0,prec=1,cntnm=0;
    for(int i=miny;i>0;i--)
    {
        if(i*minx <= mxm)
            break;
        int st,dr,mij,ans=0;
        st=max(prec, (mxm-1)/i+1);
        dr=minx;
        if(!verif(st,i))
            continue;
        while(st<=dr)
        {
            mij=(st+dr)/2;
            if(verif(mij,i))
            {
                ans = max(ans, mij);
                st=mij+1;
            }
            else
            {
                dr=mij-1;
            }
        }
        mxm = max(mxm, i*ans);
        cntnm++;
        if(cntnm>=2)
            break;
        prec=ans;
    }
    prec=1;
    cntnm=0;
    for(int i=minx;i>0;i--)
    {
        if(i*miny <= mxm)
            break;
        int st,dr,mij,ans=0;
        st=max(prec, (mxm-1)/i+1);
        dr=miny;
        if(!verif(i,st))
            continue;
        while(st<=dr)
        {
            mij=(st+dr)/2;
            if(verif(i,mij))
            {
                ans = max(ans, mij);
                st=mij+1;
            }
            else
            {
                dr=mij-1;
            }
        }
        mxm = max(mxm, i*ans);
        cntnm++;
        if(cntnm>=2)
            break;
        prec=ans;
    }
    cout<<mxm;
}
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*miny * n * m <= 170000000)
    {
        solve_n3_y(minx,miny);
        return 0;
    }
    else if(1LL*minx*n*m <= 170000000)
    {
        solve_n3_x(minx,miny);
        return 0;
    }
    else if(1)
    {
        solve_bulaneala(minx,miny);
        return 0;
    }
    else
    {
        cout<<minx*miny;
        return 0;
    }
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 4444 KB Output is correct
2 Correct 1 ms 4444 KB Output is correct
3 Correct 12 ms 42756 KB Output is correct
4 Correct 9 ms 42740 KB Output is correct
5 Correct 1 ms 4444 KB Output is correct
6 Correct 1 ms 4444 KB Output is correct
7 Correct 1 ms 4444 KB Output is correct
8 Correct 1 ms 4444 KB Output is correct
9 Correct 1 ms 4444 KB Output is correct
10 Correct 1 ms 4440 KB Output is correct
11 Correct 1 ms 4440 KB Output is correct
12 Correct 1 ms 4440 KB Output is correct
13 Correct 1 ms 4440 KB Output is correct
14 Correct 1 ms 4440 KB Output is correct
15 Correct 1 ms 4440 KB Output is correct
16 Correct 1 ms 4444 KB Output is correct
17 Correct 1 ms 6872 KB Output is correct
18 Correct 1 ms 6748 KB Output is correct
19 Correct 1 ms 7004 KB Output is correct
20 Correct 2 ms 7004 KB Output is correct
21 Correct 1 ms 6748 KB Output is correct
22 Correct 1 ms 6748 KB Output is correct
23 Correct 2 ms 7004 KB Output is correct
24 Correct 1 ms 7004 KB Output is correct
25 Correct 2 ms 7004 KB Output is correct
26 Correct 2 ms 7004 KB Output is correct
27 Correct 6 ms 12124 KB Output is correct
28 Correct 7 ms 12124 KB Output is correct
29 Incorrect 29 ms 12764 KB Output isn't correct
30 Correct 46 ms 13372 KB Output is correct
31 Correct 32 ms 12892 KB Output is correct
32 Correct 41 ms 13600 KB Output is correct
33 Correct 110 ms 15848 KB Output is correct
34 Correct 6 ms 12380 KB Output is correct
35 Correct 46 ms 15364 KB Output is correct
36 Correct 24 ms 15192 KB Output is correct
37 Correct 1 ms 4440 KB Output is correct
38 Correct 252 ms 57344 KB Output is correct
39 Correct 1 ms 4444 KB Output is correct
40 Correct 189 ms 24552 KB Output is correct
41 Correct 1 ms 4440 KB Output is correct
42 Correct 2 ms 7008 KB Output is correct
43 Correct 379 ms 57580 KB Output is correct
44 Correct 80 ms 15860 KB Output is correct
45 Incorrect 457 ms 57516 KB Output isn't correct
46 Correct 723 ms 57540 KB Output is correct
47 Incorrect 473 ms 58016 KB Output isn't correct
48 Correct 505 ms 57324 KB Output is correct
49 Correct 287 ms 57376 KB Output is correct
50 Correct 477 ms 57332 KB Output is correct
51 Correct 481 ms 57568 KB Output is correct
52 Correct 459 ms 57468 KB Output is correct
53 Correct 463 ms 57316 KB Output is correct
54 Correct 672 ms 57684 KB Output is correct
55 Correct 674 ms 57684 KB Output is correct
56 Correct 285 ms 57424 KB Output is correct
57 Correct 638 ms 57712 KB Output is correct
58 Correct 715 ms 57484 KB Output is correct
59 Correct 753 ms 57588 KB Output is correct
60 Correct 381 ms 57444 KB Output is correct
61 Correct 598 ms 57572 KB Output is correct
62 Correct 390 ms 57592 KB Output is correct
63 Correct 319 ms 57428 KB Output is correct
64 Correct 379 ms 57448 KB Output is correct
65 Correct 559 ms 57676 KB Output is correct
66 Correct 379 ms 57312 KB Output is correct
67 Correct 446 ms 57472 KB Output is correct
68 Correct 456 ms 57576 KB Output is correct
69 Correct 579 ms 57428 KB Output is correct
70 Execution timed out 1032 ms 50568 KB Time limit exceeded
71 Execution timed out 1052 ms 57432 KB Time limit exceeded
72 Execution timed out 1033 ms 57320 KB Time limit exceeded
73 Execution timed out 1051 ms 57472 KB Time limit exceeded
74 Execution timed out 1055 ms 57716 KB Time limit exceeded
75 Execution timed out 1073 ms 57468 KB Time limit exceeded
76 Execution timed out 1031 ms 57304 KB Time limit exceeded
77 Execution timed out 1074 ms 57328 KB Time limit exceeded
78 Execution timed out 1079 ms 57580 KB Time limit exceeded
79 Execution timed out 1101 ms 58028 KB Time limit exceeded
80 Execution timed out 1014 ms 57976 KB Time limit exceeded
81 Execution timed out 1062 ms 57468 KB Time limit exceeded
82 Execution timed out 1031 ms 57680 KB Time limit exceeded
83 Execution timed out 1050 ms 57568 KB Time limit exceeded
84 Execution timed out 1059 ms 57444 KB Time limit exceeded
85 Execution timed out 1033 ms 57472 KB Time limit exceeded
86 Correct 380 ms 57580 KB Output is correct
87 Execution timed out 1072 ms 57348 KB Time limit exceeded
88 Execution timed out 1060 ms 57940 KB Time limit exceeded
89 Execution timed out 1079 ms 57300 KB Time limit exceeded
90 Execution timed out 1036 ms 50256 KB Time limit exceeded
91 Execution timed out 1057 ms 57428 KB Time limit exceeded
92 Execution timed out 1043 ms 58020 KB Time limit exceeded
93 Correct 551 ms 57576 KB Output is correct
94 Execution timed out 1059 ms 57428 KB Time limit exceeded
95 Execution timed out 1060 ms 57476 KB Time limit exceeded
96 Execution timed out 1043 ms 57424 KB Time limit exceeded
97 Correct 509 ms 57696 KB Output is correct
98 Execution timed out 1028 ms 57476 KB Time limit exceeded
99 Execution timed out 1026 ms 57624 KB Time limit exceeded
100 Correct 570 ms 57984 KB Output is correct