Submission #169918

# Submission time Handle Problem Language Result Execution time Memory
169918 2019-12-23T09:19:07 Z stefdasca Bomb (IZhO17_bomb) C++14
46 / 100
562 ms 62712 KB
#include<bits/stdc++.h>
#define god dimasi5eks
#pragma GCC optimize("O3")
#define fi first
#define se second
#define pb push_back
#define pf push_front
#define mod 1000000007
#define dancila 3.14159265359
#define eps 1e-9

using namespace std;

typedef long long ll;


int add(int a, int b)
{
    ll x = a+b;
    if(x >= mod)
        x -= mod;
    if(x < 0)
        x += mod;
    return x;
}
ll mul(ll a, ll b)
{
    return (a*b) % mod;
}

ll pw(ll a, ll b)
{
    ll ans = 1;
    while(b)
    {
        if(b & 1)
            ans = (ans * a) % mod;
        a = (a * a) % mod;
        b >>= 1;
    }
    return ans;
}
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
long long rand_seed()
{
    long long a = rng();
    return a;
}
char c[2600][2600];
int n, m, mars[2600][2600], sp[2600][2600];
int sum(int xa, int ya, int xb, int yb)
{
    return sp[xb][yb] - sp[xa - 1][yb] - sp[xb][ya - 1] + sp[xa - 1][ya - 1];
}
bool chk(int i, int j)
{
    for(int q = i; q <= n; ++q)
        for(int p = j; p <= m; ++p)
        {
            if(sp[q][p] - sp[q - i][p] - sp[q][p - j] + sp[q - i][p - j] == i * j)
            {
                mars[q - i + 1][p - j + 1]++;
                mars[q + 1][p - j + 1]--;
                mars[q - i + 1][p + 1]--;
                mars[q + 1][p + 1]++;
            }
        }
    bool ok = 1;
    for(int q = 1; q <= n; ++q)
        for(int p = 1; p <= m; ++p)
        {
            mars[q][p] = mars[q][p] + mars[q-1][p] + mars[q][p-1] - mars[q-1][p-1];
            if(c[q][p] == '1' && !mars[q][p])
            {
                ok = 0;
                p = m+1;
                q = n+1;
            }
        }
    for(int q = 1; q <= n; ++q)
        for(int p = 1; p <= m; ++p)
            mars[q][p] = 0;
    return ok;
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> n >> m;
    for(int i = 1; i <= n; ++i)
        cin >> (c[i] + 1);
    int xx = 0;
    for(int i = 1; i <= n; ++i)
        for(int j = 1; j <= m; ++j)
            xx += (c[i][j] == '0');
    if(!xx)
    {
        cout << n*m;
        return 0;
    }
    for(int i = 1; i <= n; ++i)
        for(int j = 1; j <= m; ++j)
            sp[i][j] = (c[i][j] - '0') + sp[i-1][j] + sp[i][j-1] - sp[i-1][j-1];
    int mnx = m, mny = n;
    for(int i = 1; i <= n; ++i)
    {
        int str = 0;
        for(int j = 1; j <= m; ++j)
        {
            if(c[i][j] == '1')
                ++str;
            else
            {
                if(str)
                    mnx = min(mnx, str);
                str = 0;
            }
        }
        if(str)
            mnx = min(mnx, str);
    }
    for(int j = 1; j <= m; ++j)
    {
        int str = 0;
        for(int i = 1; i <= n; ++i)
        {
            if(c[i][j] == '1')
                ++str;
            else
            {
                if(str)
                    mny = min(mny, str);
                str = 0;
            }
        }
        if(str)
            mny = min(mny, str);
    }
    int mxans = 0;
    int st = 1;
    int dr = mny;
    int ans = 1;
    while(st <= dr)
    {
        int mid = (st + dr) / 2;
        if(chk(mid, mnx))
            ans = mid, st = mid + 1;
        else
            dr = mid - 1;
    }
    mxans = max(mxans, ans * mnx);
    st = mxans / mny + 1;
    dr = mnx;
    ans = 1;
    while(st <= dr)
    {
        int mid = (st + dr) / 2;
        if(chk(mny, mid))
            ans = mid, st = mid + 1;
        else
            dr = mid - 1;
    }
    mxans = max(mxans, mny * ans);
    if(n <= 450 && m <= 450)
    {
        int mxans = 0;
        for(int i = n; i >= 1; --i)
        {
            if(i * m <= mxans)
                break;
            int st = mxans / i + 1;
            int dr = m;
            int ans = 0;
            if(chk(i, st))
                while(st <= dr)
                {
                    int mid = (st + dr) / 2;
                    if(chk(i, mid))
                        ans = mid, st = mid + 1;
                    else
                        dr = mid - 1;
                }
            mxans = max(mxans, i * ans);
        }
    }
    cout << mxans;
    return 0;
}

Compilation message

bomb.cpp: In function 'bool chk(int, int)':
bomb.cpp:70:26: warning: assuming signed overflow does not occur when assuming that (X + c) >= X is always true [-Wstrict-overflow]
         for(int p = 1; p <= m; ++p)
                        ~~^~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 504 KB Output is correct
3 Correct 27 ms 26872 KB Output is correct
4 Correct 27 ms 26748 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Correct 2 ms 376 KB Output is correct
8 Incorrect 2 ms 504 KB Output isn't correct
9 Incorrect 2 ms 504 KB Output isn't correct
10 Correct 2 ms 508 KB Output is correct
11 Incorrect 2 ms 504 KB Output isn't correct
12 Correct 2 ms 508 KB Output is correct
13 Correct 2 ms 508 KB Output is correct
14 Correct 2 ms 504 KB Output is correct
15 Incorrect 2 ms 504 KB Output isn't correct
16 Correct 2 ms 504 KB Output is correct
17 Correct 3 ms 1016 KB Output is correct
18 Incorrect 3 ms 1144 KB Output isn't correct
19 Incorrect 4 ms 1400 KB Output isn't correct
20 Incorrect 4 ms 1400 KB Output isn't correct
21 Incorrect 3 ms 888 KB Output isn't correct
22 Incorrect 4 ms 1272 KB Output isn't correct
23 Incorrect 5 ms 1532 KB Output isn't correct
24 Incorrect 4 ms 1272 KB Output isn't correct
25 Incorrect 5 ms 1528 KB Output isn't correct
26 Correct 5 ms 1528 KB Output is correct
27 Correct 53 ms 4228 KB Output is correct
28 Incorrect 45 ms 4472 KB Output isn't correct
29 Incorrect 122 ms 5656 KB Output isn't correct
30 Incorrect 123 ms 6616 KB Output isn't correct
31 Incorrect 74 ms 5252 KB Output isn't correct
32 Incorrect 99 ms 6052 KB Output isn't correct
33 Incorrect 146 ms 6936 KB Output isn't correct
34 Incorrect 42 ms 4856 KB Output isn't correct
35 Incorrect 112 ms 6944 KB Output isn't correct
36 Correct 181 ms 7036 KB Output is correct
37 Correct 3 ms 504 KB Output is correct
38 Correct 17 ms 10620 KB Output is correct
39 Correct 2 ms 504 KB Output is correct
40 Correct 50 ms 16448 KB Output is correct
41 Correct 2 ms 504 KB Output is correct
42 Incorrect 7 ms 1528 KB Output isn't correct
43 Correct 433 ms 61904 KB Output is correct
44 Incorrect 295 ms 6904 KB Output isn't correct
45 Incorrect 416 ms 61296 KB Output isn't correct
46 Correct 264 ms 61284 KB Output is correct
47 Incorrect 408 ms 61176 KB Output isn't correct
48 Correct 442 ms 61284 KB Output is correct
49 Correct 210 ms 61668 KB Output is correct
50 Correct 466 ms 62312 KB Output is correct
51 Correct 468 ms 62404 KB Output is correct
52 Correct 428 ms 62200 KB Output is correct
53 Correct 410 ms 62324 KB Output is correct
54 Correct 437 ms 62200 KB Output is correct
55 Correct 423 ms 62328 KB Output is correct
56 Correct 432 ms 61220 KB Output is correct
57 Correct 477 ms 62592 KB Output is correct
58 Correct 525 ms 62712 KB Output is correct
59 Correct 474 ms 59764 KB Output is correct
60 Correct 274 ms 59128 KB Output is correct
61 Correct 285 ms 60340 KB Output is correct
62 Correct 426 ms 60152 KB Output is correct
63 Correct 404 ms 60156 KB Output is correct
64 Correct 352 ms 60692 KB Output is correct
65 Correct 389 ms 60792 KB Output is correct
66 Correct 431 ms 60692 KB Output is correct
67 Correct 454 ms 60688 KB Output is correct
68 Correct 500 ms 60688 KB Output is correct
69 Correct 488 ms 60944 KB Output is correct
70 Incorrect 255 ms 47516 KB Output isn't correct
71 Incorrect 450 ms 60128 KB Output isn't correct
72 Incorrect 423 ms 60152 KB Output isn't correct
73 Incorrect 434 ms 60152 KB Output isn't correct
74 Incorrect 419 ms 60140 KB Output isn't correct
75 Incorrect 414 ms 60152 KB Output isn't correct
76 Incorrect 447 ms 60164 KB Output isn't correct
77 Incorrect 478 ms 60664 KB Output isn't correct
78 Incorrect 455 ms 61048 KB Output isn't correct
79 Incorrect 338 ms 61304 KB Output isn't correct
80 Incorrect 308 ms 61168 KB Output isn't correct
81 Incorrect 337 ms 60340 KB Output isn't correct
82 Incorrect 480 ms 59640 KB Output isn't correct
83 Incorrect 510 ms 59352 KB Output isn't correct
84 Incorrect 258 ms 59404 KB Output isn't correct
85 Incorrect 469 ms 60304 KB Output isn't correct
86 Incorrect 339 ms 60920 KB Output isn't correct
87 Correct 453 ms 59420 KB Output is correct
88 Incorrect 462 ms 59512 KB Output isn't correct
89 Incorrect 387 ms 59612 KB Output isn't correct
90 Incorrect 310 ms 48832 KB Output isn't correct
91 Incorrect 407 ms 59480 KB Output isn't correct
92 Incorrect 438 ms 59388 KB Output isn't correct
93 Incorrect 374 ms 59512 KB Output isn't correct
94 Incorrect 418 ms 59512 KB Output isn't correct
95 Incorrect 562 ms 60312 KB Output isn't correct
96 Incorrect 487 ms 59512 KB Output isn't correct
97 Incorrect 320 ms 60280 KB Output isn't correct
98 Incorrect 520 ms 60280 KB Output isn't correct
99 Incorrect 397 ms 60388 KB Output isn't correct
100 Incorrect 477 ms 60280 KB Output isn't correct