답안 #885338

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
885338 2023-12-09T13:21:45 Z alexdd Bomb (IZhO17_bomb) C++17
67 / 100
1000 ms 55868 KB
#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;
}
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;
        while(poz+1<=miny && verif(i,poz+1))
        {
            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;
        while(poz+1<=minx && verif(poz+1,i))
        {
            poz++;
        }
        mxm = max(mxm, i*poz);
    }
    cout<<mxm;
}
void solve_bulaneala(int minx, int miny)
{
    int mxm=0,prec=1;
    for(int i=miny;i>max(0,miny-3);i--)
    {
        if(i*minx <= mxm)
            break;
        int st,dr,mij,ans=0;
        st=prec;
        dr=minx;
        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);
        prec=ans;
    }
    prec=1;
    for(int i=minx;i>max(0,minx-3);i--)
    {
        if(i*miny <= mxm)
            break;
        int st,dr,mij,ans=0;
        st=prec;
        dr=miny;
        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);
        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;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 1 ms 4700 KB Output is correct
3 Correct 8 ms 41036 KB Output is correct
4 Correct 8 ms 40796 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
6 Correct 1 ms 2396 KB Output is correct
7 Correct 1 ms 2392 KB Output is correct
8 Correct 1 ms 4700 KB Output is correct
9 Correct 1 ms 4696 KB Output is correct
10 Correct 1 ms 2396 KB Output is correct
11 Correct 1 ms 4700 KB Output is correct
12 Correct 1 ms 2396 KB Output is correct
13 Correct 0 ms 2396 KB Output is correct
14 Correct 1 ms 2396 KB Output is correct
15 Correct 1 ms 2396 KB Output is correct
16 Correct 1 ms 4700 KB Output is correct
17 Correct 1 ms 4780 KB Output is correct
18 Correct 1 ms 4700 KB Output is correct
19 Correct 2 ms 4956 KB Output is correct
20 Correct 2 ms 4956 KB Output is correct
21 Correct 1 ms 4700 KB Output is correct
22 Correct 1 ms 4956 KB Output is correct
23 Correct 2 ms 4956 KB Output is correct
24 Correct 1 ms 4956 KB Output is correct
25 Correct 2 ms 4956 KB Output is correct
26 Correct 2 ms 4956 KB Output is correct
27 Correct 6 ms 11868 KB Output is correct
28 Correct 9 ms 12092 KB Output is correct
29 Correct 51 ms 11868 KB Output is correct
30 Correct 49 ms 12124 KB Output is correct
31 Correct 35 ms 12120 KB Output is correct
32 Correct 44 ms 12068 KB Output is correct
33 Correct 129 ms 14168 KB Output is correct
34 Correct 8 ms 10332 KB Output is correct
35 Correct 62 ms 14172 KB Output is correct
36 Correct 31 ms 14172 KB Output is correct
37 Correct 1 ms 4700 KB Output is correct
38 Correct 448 ms 55612 KB Output is correct
39 Correct 1 ms 4700 KB Output is correct
40 Correct 104 ms 21940 KB Output is correct
41 Correct 1 ms 4696 KB Output is correct
42 Correct 3 ms 4956 KB Output is correct
43 Correct 452 ms 55868 KB Output is correct
44 Correct 179 ms 14232 KB Output is correct
45 Incorrect 922 ms 55640 KB Output isn't correct
46 Correct 896 ms 55836 KB Output is correct
47 Incorrect 902 ms 55636 KB Output isn't correct
48 Correct 781 ms 55700 KB Output is correct
49 Correct 329 ms 55636 KB Output is correct
50 Correct 802 ms 55632 KB Output is correct
51 Correct 819 ms 55616 KB Output is correct
52 Correct 807 ms 55472 KB Output is correct
53 Correct 770 ms 55624 KB Output is correct
54 Correct 940 ms 55484 KB Output is correct
55 Correct 830 ms 55768 KB Output is correct
56 Correct 475 ms 55620 KB Output is correct
57 Correct 908 ms 55612 KB Output is correct
58 Execution timed out 1030 ms 55420 KB Time limit exceeded
59 Correct 957 ms 55612 KB Output is correct
60 Correct 377 ms 55616 KB Output is correct
61 Correct 735 ms 55620 KB Output is correct
62 Correct 448 ms 55460 KB Output is correct
63 Correct 463 ms 55712 KB Output is correct
64 Correct 426 ms 55376 KB Output is correct
65 Correct 804 ms 55868 KB Output is correct
66 Correct 545 ms 55864 KB Output is correct
67 Correct 779 ms 55620 KB Output is correct
68 Correct 832 ms 55632 KB Output is correct
69 Correct 901 ms 55636 KB Output is correct
70 Incorrect 522 ms 48468 KB Output isn't correct
71 Incorrect 941 ms 55452 KB Output isn't correct
72 Incorrect 943 ms 55468 KB Output isn't correct
73 Incorrect 877 ms 55636 KB Output isn't correct
74 Incorrect 958 ms 55716 KB Output isn't correct
75 Incorrect 960 ms 55740 KB Output isn't correct
76 Incorrect 997 ms 55612 KB Output isn't correct
77 Execution timed out 1054 ms 55608 KB Time limit exceeded
78 Execution timed out 1058 ms 55608 KB Time limit exceeded
79 Execution timed out 1058 ms 55472 KB Time limit exceeded
80 Execution timed out 1049 ms 55360 KB Time limit exceeded
81 Incorrect 760 ms 55612 KB Output isn't correct
82 Execution timed out 1053 ms 55608 KB Time limit exceeded
83 Execution timed out 1016 ms 55676 KB Time limit exceeded
84 Execution timed out 1051 ms 55380 KB Time limit exceeded
85 Incorrect 993 ms 55620 KB Output isn't correct
86 Incorrect 690 ms 55616 KB Output isn't correct
87 Correct 920 ms 55612 KB Output is correct
88 Execution timed out 1010 ms 55608 KB Time limit exceeded
89 Incorrect 852 ms 55620 KB Output isn't correct
90 Incorrect 638 ms 48512 KB Output isn't correct
91 Incorrect 946 ms 55624 KB Output isn't correct
92 Incorrect 901 ms 55724 KB Output isn't correct
93 Incorrect 703 ms 55636 KB Output isn't correct
94 Incorrect 837 ms 55708 KB Output isn't correct
95 Execution timed out 1059 ms 55488 KB Time limit exceeded
96 Execution timed out 1046 ms 55612 KB Time limit exceeded
97 Incorrect 675 ms 55620 KB Output isn't correct
98 Execution timed out 1041 ms 55376 KB Time limit exceeded
99 Incorrect 873 ms 55564 KB Output isn't correct
100 Incorrect 722 ms 55472 KB Output isn't correct