Submission #1011952

# Submission time Handle Problem Language Result Execution time Memory
1011952 2024-07-01T11:46:57 Z mdn2002 Soccer Stadium (IOI23_soccer) C++17
70 / 100
4500 ms 445524 KB
#include "soccer.h"
#include<bits/stdc++.h>
using namespace std;
int dp[8000006];
int biggest_stadium(int N, vector<vector<int>> F) {
    memset(dp, -1, sizeof dp);
    int n = N;
    vector<vector<int>> a = F, next(n, vector<int>(n)), sum(n, vector<int>(n));
    map<vector<int>, int> mp;
    vector<vector<int>> v(n);

    function<int(int, int, int, int)> summ = [&] (int l, int r, int x, int y) {
        long long ans = sum[y][r];
        if (x - 1 >= 0) ans -= sum[x - 1][r];
        if (l - 1 >= 0) ans -= sum[y][l - 1];
        if (x - 1 >= 0 && l - 1 >= 0) ans += sum[x - 1][l - 1];
        return ans;
    };

    int cnt = 0;
    function<int(int, int, int, int)> f = [&] (int l, int r, int x, int y) {
        if (mp.count({l, r, x, y}) == 0) mp[{l, r, x, y}] = ++ cnt;
        int ans = 0, id = mp[{l, r, x, y}];
        if (dp[id] != -1) return dp[id];
        if (x - 1 >= 0) {
            for (int j = l; j <= r; j ++) {
                if (a[x - 1][j]) continue;
                int z = min(r, next[x - 1][j]);
                int ll = 0, rr = x, mid;
                while (ll < rr) {
                    mid = (ll + rr) / 2;
                    if (summ(j, z, mid, y) == 0) rr = mid;
                    else ll = mid + 1;
                }
                ans = max(ans, f(j, z, ll, y) + (z - j + 1) * (x - ll));
                j = *upper_bound(v[x - 1].begin(), v[x - 1].end(), z) - 1;
            }
        }
        if (y + 1 < n) {
            for (int j = l; j <= r; j ++) {
                if (a[y + 1][j]) continue;
                int z = min(r, next[y + 1][j]);
                int ll = y + 1, rr = n, mid;
                while (ll < rr) {
                    mid = (ll + rr) / 2;
                    if (summ(j, z, x, mid) == 0) ll = mid + 1;
                    else rr = mid;
                }
                ll --;
                ans = max(ans, f(j, z, x, ll) + (z - j + 1) * (ll - y));
                j = *upper_bound(v[y + 1].begin(), v[y + 1].end(), z) - 1;;
            }
        }

        return dp[id] = ans;
    };

    for (int i = 0; i < n; i ++) {
        for (int j = 0; j < n; j ++) {
            sum[i][j] += a[i][j];
            if (j) sum[i][j] += sum[i][j - 1];
            if (a[i][j] == 0) v[i].push_back(j);
        }
        v[i].push_back(n + 1);
    }
    for (int i = 1; i < n; i ++) {
        for (int j = 0; j < n; j ++) sum[i][j] += sum[i - 1][j];
    }
    for (int i = 0; i < n; i ++) {
        if (a[i][n - 1] == 0) next[i][n - 1] = n - 1;
        else next[i][n - 1] = n - 2;
        for (int j = n - 2; j >= 0; j --) {
            if (a[i][j]) next[i][j] = j - 1;
            else next[i][j] = next[i][j + 1];
        }
    }
    int ans = 0;
    for (int i = 0; i < n; i ++) {
        for (int j = 0; j < n; j ++) {
            if (a[i][j]) continue;
            int ll = i, rr = n, mid, x, y;
            while (ll < rr) {
                mid = (ll + rr) / 2;
                if (summ(j, next[i][j], i, mid) == 0) ll = mid + 1;
                else rr = mid;
            }
            ll --;
            y = ll;

            ll = 0, rr = i;
            while (ll < rr) {
                mid = (ll + rr) / 2;
                if (summ(j, next[i][j], mid, i) == 0) rr = mid;
                else ll = mid + 1;
            }
            x = ll;
            ans = max(ans, f(j, next[i][j], x, y) + (next[i][j] - j + 1) * (y - x + 1));
            j = next[i][j];
        }
    }
    return ans;
}
/*
3
0 0 0
0 1 0
0 0 0
*/
# Verdict Execution time Memory Grader output
1 Correct 13 ms 31576 KB ok
# Verdict Execution time Memory Grader output
1 Correct 12 ms 31576 KB ok
2 Correct 12 ms 31676 KB ok
3 Correct 12 ms 31580 KB ok
4 Correct 14 ms 31580 KB ok
5 Correct 15 ms 31836 KB ok
6 Correct 12 ms 31576 KB ok
7 Correct 13 ms 31836 KB ok
8 Correct 29 ms 38128 KB ok
9 Correct 243 ms 130648 KB ok
# Verdict Execution time Memory Grader output
1 Correct 12 ms 31576 KB ok
2 Correct 12 ms 31676 KB ok
3 Correct 12 ms 31576 KB ok
4 Correct 13 ms 31580 KB ok
5 Correct 11 ms 31580 KB ok
6 Correct 13 ms 31580 KB ok
7 Correct 12 ms 31836 KB ok
8 Correct 12 ms 31664 KB ok
9 Correct 13 ms 31580 KB ok
10 Correct 12 ms 31564 KB ok
11 Correct 12 ms 31580 KB ok
12 Correct 13 ms 31576 KB ok
13 Correct 13 ms 31612 KB ok
# Verdict Execution time Memory Grader output
1 Correct 13 ms 31576 KB ok
2 Correct 12 ms 31576 KB ok
3 Correct 12 ms 31676 KB ok
4 Correct 12 ms 31576 KB ok
5 Correct 13 ms 31580 KB ok
6 Correct 11 ms 31580 KB ok
7 Correct 13 ms 31580 KB ok
8 Correct 12 ms 31836 KB ok
9 Correct 12 ms 31664 KB ok
10 Correct 13 ms 31580 KB ok
11 Correct 12 ms 31564 KB ok
12 Correct 12 ms 31580 KB ok
13 Correct 13 ms 31576 KB ok
14 Correct 13 ms 31612 KB ok
15 Correct 13 ms 31580 KB ok
16 Correct 13 ms 31716 KB ok
17 Correct 13 ms 31644 KB ok
18 Correct 15 ms 31580 KB ok
19 Correct 13 ms 31580 KB ok
20 Correct 13 ms 31576 KB ok
21 Correct 12 ms 31580 KB ok
22 Correct 12 ms 31604 KB ok
23 Correct 13 ms 31580 KB ok
24 Correct 13 ms 31564 KB ok
25 Correct 12 ms 31576 KB ok
26 Correct 13 ms 31576 KB ok
# Verdict Execution time Memory Grader output
1 Correct 13 ms 31576 KB ok
2 Correct 12 ms 31576 KB ok
3 Correct 12 ms 31676 KB ok
4 Correct 12 ms 31580 KB ok
5 Correct 14 ms 31580 KB ok
6 Correct 12 ms 31576 KB ok
7 Correct 13 ms 31580 KB ok
8 Correct 11 ms 31580 KB ok
9 Correct 13 ms 31580 KB ok
10 Correct 12 ms 31836 KB ok
11 Correct 12 ms 31664 KB ok
12 Correct 13 ms 31580 KB ok
13 Correct 12 ms 31564 KB ok
14 Correct 12 ms 31580 KB ok
15 Correct 13 ms 31576 KB ok
16 Correct 13 ms 31612 KB ok
17 Correct 13 ms 31580 KB ok
18 Correct 13 ms 31716 KB ok
19 Correct 13 ms 31644 KB ok
20 Correct 15 ms 31580 KB ok
21 Correct 13 ms 31580 KB ok
22 Correct 13 ms 31576 KB ok
23 Correct 12 ms 31580 KB ok
24 Correct 12 ms 31604 KB ok
25 Correct 13 ms 31580 KB ok
26 Correct 13 ms 31564 KB ok
27 Correct 12 ms 31576 KB ok
28 Correct 13 ms 31576 KB ok
29 Correct 13 ms 31576 KB ok
30 Correct 14 ms 31700 KB ok
31 Correct 14 ms 31884 KB ok
32 Correct 13 ms 31556 KB ok
33 Correct 12 ms 31580 KB ok
34 Correct 13 ms 31580 KB ok
35 Correct 13 ms 31580 KB ok
36 Correct 12 ms 31580 KB ok
37 Correct 12 ms 31572 KB ok
38 Correct 13 ms 31576 KB ok
39 Correct 13 ms 31580 KB ok
40 Correct 13 ms 31580 KB ok
41 Correct 15 ms 31580 KB ok
# Verdict Execution time Memory Grader output
1 Correct 13 ms 31576 KB ok
2 Correct 12 ms 31576 KB ok
3 Correct 12 ms 31676 KB ok
4 Correct 12 ms 31580 KB ok
5 Correct 14 ms 31580 KB ok
6 Correct 12 ms 31576 KB ok
7 Correct 13 ms 31580 KB ok
8 Correct 11 ms 31580 KB ok
9 Correct 13 ms 31580 KB ok
10 Correct 12 ms 31836 KB ok
11 Correct 12 ms 31664 KB ok
12 Correct 13 ms 31580 KB ok
13 Correct 12 ms 31564 KB ok
14 Correct 12 ms 31580 KB ok
15 Correct 13 ms 31576 KB ok
16 Correct 13 ms 31612 KB ok
17 Correct 13 ms 31580 KB ok
18 Correct 13 ms 31716 KB ok
19 Correct 13 ms 31644 KB ok
20 Correct 15 ms 31580 KB ok
21 Correct 13 ms 31580 KB ok
22 Correct 13 ms 31576 KB ok
23 Correct 12 ms 31580 KB ok
24 Correct 12 ms 31604 KB ok
25 Correct 13 ms 31580 KB ok
26 Correct 13 ms 31564 KB ok
27 Correct 12 ms 31576 KB ok
28 Correct 13 ms 31576 KB ok
29 Correct 13 ms 31576 KB ok
30 Correct 14 ms 31700 KB ok
31 Correct 14 ms 31884 KB ok
32 Correct 13 ms 31556 KB ok
33 Correct 12 ms 31580 KB ok
34 Correct 13 ms 31580 KB ok
35 Correct 13 ms 31580 KB ok
36 Correct 12 ms 31580 KB ok
37 Correct 12 ms 31572 KB ok
38 Correct 13 ms 31576 KB ok
39 Correct 13 ms 31580 KB ok
40 Correct 13 ms 31580 KB ok
41 Correct 15 ms 31580 KB ok
42 Correct 322 ms 63312 KB ok
43 Correct 248 ms 57136 KB ok
44 Correct 421 ms 69456 KB ok
45 Correct 347 ms 64852 KB ok
46 Correct 445 ms 68696 KB ok
47 Correct 27 ms 38020 KB ok
48 Correct 72 ms 41352 KB ok
49 Correct 53 ms 40788 KB ok
50 Correct 133 ms 51536 KB ok
51 Correct 39 ms 40528 KB ok
52 Correct 45 ms 39308 KB ok
53 Correct 27 ms 37392 KB ok
54 Correct 35 ms 38844 KB ok
55 Correct 47 ms 40016 KB ok
56 Correct 26 ms 37452 KB ok
57 Correct 74 ms 45124 KB ok
58 Correct 76 ms 46012 KB ok
59 Correct 83 ms 47104 KB ok
# Verdict Execution time Memory Grader output
1 Correct 13 ms 31576 KB ok
2 Correct 12 ms 31576 KB ok
3 Correct 12 ms 31676 KB ok
4 Correct 12 ms 31580 KB ok
5 Correct 14 ms 31580 KB ok
6 Correct 15 ms 31836 KB ok
7 Correct 12 ms 31576 KB ok
8 Correct 13 ms 31836 KB ok
9 Correct 29 ms 38128 KB ok
10 Correct 243 ms 130648 KB ok
11 Correct 12 ms 31576 KB ok
12 Correct 13 ms 31580 KB ok
13 Correct 11 ms 31580 KB ok
14 Correct 13 ms 31580 KB ok
15 Correct 12 ms 31836 KB ok
16 Correct 12 ms 31664 KB ok
17 Correct 13 ms 31580 KB ok
18 Correct 12 ms 31564 KB ok
19 Correct 12 ms 31580 KB ok
20 Correct 13 ms 31576 KB ok
21 Correct 13 ms 31612 KB ok
22 Correct 13 ms 31580 KB ok
23 Correct 13 ms 31716 KB ok
24 Correct 13 ms 31644 KB ok
25 Correct 15 ms 31580 KB ok
26 Correct 13 ms 31580 KB ok
27 Correct 13 ms 31576 KB ok
28 Correct 12 ms 31580 KB ok
29 Correct 12 ms 31604 KB ok
30 Correct 13 ms 31580 KB ok
31 Correct 13 ms 31564 KB ok
32 Correct 12 ms 31576 KB ok
33 Correct 13 ms 31576 KB ok
34 Correct 13 ms 31576 KB ok
35 Correct 14 ms 31700 KB ok
36 Correct 14 ms 31884 KB ok
37 Correct 13 ms 31556 KB ok
38 Correct 12 ms 31580 KB ok
39 Correct 13 ms 31580 KB ok
40 Correct 13 ms 31580 KB ok
41 Correct 12 ms 31580 KB ok
42 Correct 12 ms 31572 KB ok
43 Correct 13 ms 31576 KB ok
44 Correct 13 ms 31580 KB ok
45 Correct 13 ms 31580 KB ok
46 Correct 15 ms 31580 KB ok
47 Correct 322 ms 63312 KB ok
48 Correct 248 ms 57136 KB ok
49 Correct 421 ms 69456 KB ok
50 Correct 347 ms 64852 KB ok
51 Correct 445 ms 68696 KB ok
52 Correct 27 ms 38020 KB ok
53 Correct 72 ms 41352 KB ok
54 Correct 53 ms 40788 KB ok
55 Correct 133 ms 51536 KB ok
56 Correct 39 ms 40528 KB ok
57 Correct 45 ms 39308 KB ok
58 Correct 27 ms 37392 KB ok
59 Correct 35 ms 38844 KB ok
60 Correct 47 ms 40016 KB ok
61 Correct 26 ms 37452 KB ok
62 Correct 74 ms 45124 KB ok
63 Correct 76 ms 46012 KB ok
64 Correct 83 ms 47104 KB ok
65 Execution timed out 4587 ms 445524 KB Time limit exceeded
66 Halted 0 ms 0 KB -