답안 #885339

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
885339 2023-12-09T13:22:29 Z alexdd Bomb (IZhO17_bomb) C++17
68 / 100
1000 ms 55888 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-2);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 9 ms 40796 KB Output is correct
4 Correct 8 ms 40976 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 2396 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 1 ms 2396 KB Output is correct
14 Correct 1 ms 2396 KB Output is correct
15 Correct 1 ms 2392 KB Output is correct
16 Correct 1 ms 4700 KB Output is correct
17 Correct 1 ms 4700 KB Output is correct
18 Correct 2 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 4944 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 7 ms 11864 KB Output is correct
28 Correct 10 ms 11864 KB Output is correct
29 Correct 48 ms 11868 KB Output is correct
30 Correct 51 ms 12124 KB Output is correct
31 Correct 36 ms 12124 KB Output is correct
32 Correct 52 ms 11868 KB Output is correct
33 Correct 129 ms 14236 KB Output is correct
34 Correct 8 ms 10328 KB Output is correct
35 Correct 62 ms 14228 KB Output is correct
36 Correct 30 ms 14172 KB Output is correct
37 Correct 1 ms 4696 KB Output is correct
38 Correct 456 ms 55632 KB Output is correct
39 Correct 1 ms 4700 KB Output is correct
40 Correct 103 ms 21852 KB Output is correct
41 Correct 1 ms 4696 KB Output is correct
42 Correct 3 ms 4952 KB Output is correct
43 Correct 453 ms 55468 KB Output is correct
44 Correct 179 ms 14172 KB Output is correct
45 Incorrect 844 ms 55376 KB Output isn't correct
46 Correct 906 ms 55620 KB Output is correct
47 Incorrect 847 ms 55612 KB Output isn't correct
48 Correct 706 ms 55620 KB Output is correct
49 Correct 335 ms 55380 KB Output is correct
50 Correct 748 ms 55464 KB Output is correct
51 Correct 736 ms 55888 KB Output is correct
52 Correct 738 ms 55620 KB Output is correct
53 Correct 706 ms 55620 KB Output is correct
54 Correct 809 ms 55616 KB Output is correct
55 Correct 715 ms 55616 KB Output is correct
56 Correct 489 ms 55620 KB Output is correct
57 Correct 819 ms 55420 KB Output is correct
58 Correct 932 ms 55716 KB Output is correct
59 Correct 873 ms 55616 KB Output is correct
60 Correct 375 ms 55612 KB Output is correct
61 Correct 754 ms 55620 KB Output is correct
62 Correct 472 ms 55620 KB Output is correct
63 Correct 475 ms 55620 KB Output is correct
64 Correct 471 ms 55412 KB Output is correct
65 Correct 725 ms 55616 KB Output is correct
66 Correct 539 ms 55616 KB Output is correct
67 Correct 707 ms 55376 KB Output is correct
68 Correct 736 ms 55472 KB Output is correct
69 Correct 870 ms 55632 KB Output is correct
70 Incorrect 507 ms 48292 KB Output isn't correct
71 Incorrect 838 ms 55612 KB Output isn't correct
72 Incorrect 865 ms 55712 KB Output isn't correct
73 Incorrect 803 ms 55616 KB Output isn't correct
74 Incorrect 896 ms 55608 KB Output isn't correct
75 Incorrect 880 ms 55616 KB Output isn't correct
76 Incorrect 874 ms 55608 KB Output isn't correct
77 Incorrect 968 ms 55608 KB Output isn't correct
78 Incorrect 942 ms 55612 KB Output isn't correct
79 Execution timed out 1088 ms 55364 KB Time limit exceeded
80 Execution timed out 1036 ms 55376 KB Time limit exceeded
81 Incorrect 661 ms 55616 KB Output isn't correct
82 Execution timed out 1022 ms 55480 KB Time limit exceeded
83 Incorrect 993 ms 55608 KB Output isn't correct
84 Execution timed out 1049 ms 55604 KB Time limit exceeded
85 Incorrect 829 ms 55616 KB Output isn't correct
86 Incorrect 590 ms 55712 KB Output isn't correct
87 Correct 777 ms 55616 KB Output is correct
88 Incorrect 901 ms 55744 KB Output isn't correct
89 Incorrect 777 ms 55376 KB Output isn't correct
90 Incorrect 567 ms 48468 KB Output isn't correct
91 Incorrect 851 ms 55720 KB Output isn't correct
92 Incorrect 824 ms 55616 KB Output isn't correct
93 Incorrect 637 ms 55576 KB Output isn't correct
94 Incorrect 850 ms 55624 KB Output isn't correct
95 Incorrect 969 ms 55608 KB Output isn't correct
96 Incorrect 926 ms 55608 KB Output isn't correct
97 Incorrect 592 ms 55460 KB Output isn't correct
98 Execution timed out 1026 ms 55460 KB Time limit exceeded
99 Incorrect 764 ms 55616 KB Output isn't correct
100 Incorrect 654 ms 55620 KB Output isn't correct