Submission #1065845

# Submission time Handle Problem Language Result Execution time Memory
1065845 2024-08-19T12:18:09 Z GrindMachine Soccer Stadium (IOI23_soccer) C++17
64 / 100
4500 ms 102472 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

template<typename T> using Tree = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
typedef long long int ll;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

#define fastio ios_base::sync_with_stdio(false); cin.tie(NULL)
#define pb push_back
#define endl '\n'
#define sz(a) (int)a.size()
#define setbits(x) __builtin_popcountll(x)
#define ff first
#define ss second
#define conts continue
#define ceil2(x,y) ((x+y-1)/(y))
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
#define yes cout << "Yes" << endl
#define no cout << "No" << endl

#define rep(i,n) for(int i = 0; i < n; ++i)
#define rep1(i,n) for(int i = 1; i <= n; ++i)
#define rev(i,s,e) for(int i = s; i >= e; --i)
#define trav(i,a) for(auto &i : a)

template<typename T>
void amin(T &a, T b) {
    a = min(a,b);
}

template<typename T>
void amax(T &a, T b) {
    a = max(a,b);
}

#ifdef LOCAL
#include "debug.h"
#else
#define debug(x) 42
#endif

/*

refs:
https://blog.brucemerry.org.za/2023/11/ioi-2023-day-1.html

*/

const int MOD = 1e9 + 7;
const int N = 2e3 + 5;
const int inf1 = int(1e9) + 5;
const ll inf2 = ll(1e18) + 5;

#include "soccer.h"

int mnl[N][N], mxr[N][N], mnu[N][N];

int extendl(int i, int j, int c){
    int mx = -inf1;
    for(int r = i; r <= j; ++r){
        amax(mx,mnl[r][c]);
    }
    return mx;
}

int extendr(int i, int j, int c){
    int mn = inf1;
    for(int r = i; r <= j; ++r){
        amin(mn,mxr[r][c]);
    }
    return mn;
}

int n;
map<array<int,3>,int> mp;

int go(int i, int j, int l){
    if(i > j) return 0;

    l = extendl(i,j,l);
    int r = extendr(i,j,l);
    array<int,3> ar = {i,j,l};
    if(mp.count(ar)) return mp[ar];

    int len = r-l+1;

    // shrink j
    int ans = len+go(i,j-1,l);

    // shrink i till l expansion possible
    if(l-1){
        int p = mnu[j][l-1];
        amax(ans,len*(p-i)+go(p,j,l));
    }

    // shrink i till r expansion possible
    if(r+1 <= n){
        int p = mnu[j][r+1];
        amax(ans,len*(p-i)+go(p,j,l));
    }

    return mp[ar] = ans;
}

int biggest_stadium(int n_, std::vector<std::vector<int>> A)
{
    n = n_;

    int a[n+5][n+5];
    memset(a,0,sizeof a);
    rep1(i,n) rep1(j,n) a[i][j] = A[i-1][j-1];

    rep1(i,n) mnl[i][0] = 1;
    rep1(i,n){
        rep1(j,n){
            if(!a[i][j]){
                mnl[i][j] = mnl[i][j-1];
            }
            else{
                mnl[i][j] = j+1;
            }
        }
    }

    rep1(i,n) mxr[i][n+1] = n;
    rev(j,n,1){
        rep1(i,n){
            if(!a[i][j]){
                mxr[i][j] = mxr[i][j+1];
            }
            else{
                mxr[i][j] = j-1;
            }
        }
    }

    rep1(j,n) mnu[0][j] = 1;
    rep1(i,n){
        rep1(j,n){
            if(!a[i][j]){
                mnu[i][j] = mnu[i-1][j];
            }
            else{
                mnu[i][j] = i+1;
            }
        }
    }

    int ans = 0;
    vector<int> lx(n+5), rx(n+5);

    rep1(i,n){
        rep1(j,n) lx[j] = 1, rx[j] = n;

        {
            stack<int> stk;
            rep1(j,n){
                while(!stk.empty() and mnu[i][j] > mnu[i][stk.top()]){
                    int k = stk.top();
                    rx[k] = j-1;
                    stk.pop();
                }
                stk.push(j);
            }
        }

        {
            stack<int> stk;
            rev(j,n,1){
                while(!stk.empty() and mnu[i][j] > mnu[i][stk.top()]){
                    int k = stk.top();
                    lx[k] = j+1;
                    stk.pop();
                }
                stk.push(j);
            }
        }

        rep1(j,n){
            int l = lx[j];
            amax(ans,go(mnu[i][j],i,l));
        }
    }

    return ans;
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB ok
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB ok
2 Correct 0 ms 348 KB ok
3 Correct 1 ms 348 KB ok
4 Correct 0 ms 348 KB ok
5 Correct 0 ms 348 KB ok
6 Correct 0 ms 348 KB ok
7 Correct 3 ms 1884 KB ok
8 Correct 122 ms 12896 KB ok
9 Execution timed out 4558 ms 102472 KB Time limit exceeded
10 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB ok
2 Correct 0 ms 348 KB ok
3 Correct 0 ms 348 KB ok
4 Correct 0 ms 348 KB ok
5 Correct 0 ms 348 KB ok
6 Correct 1 ms 348 KB ok
7 Correct 1 ms 348 KB ok
8 Correct 0 ms 348 KB ok
9 Correct 0 ms 348 KB ok
10 Correct 1 ms 348 KB ok
11 Correct 1 ms 344 KB ok
12 Correct 0 ms 440 KB ok
13 Correct 1 ms 348 KB ok
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB ok
2 Correct 0 ms 348 KB ok
3 Correct 0 ms 348 KB ok
4 Correct 0 ms 348 KB ok
5 Correct 0 ms 348 KB ok
6 Correct 0 ms 348 KB ok
7 Correct 1 ms 348 KB ok
8 Correct 1 ms 348 KB ok
9 Correct 0 ms 348 KB ok
10 Correct 0 ms 348 KB ok
11 Correct 1 ms 348 KB ok
12 Correct 1 ms 344 KB ok
13 Correct 0 ms 440 KB ok
14 Correct 1 ms 348 KB ok
15 Correct 0 ms 344 KB ok
16 Correct 0 ms 444 KB ok
17 Correct 1 ms 344 KB ok
18 Correct 0 ms 348 KB ok
19 Correct 0 ms 444 KB ok
20 Correct 1 ms 348 KB ok
21 Correct 0 ms 444 KB ok
22 Correct 0 ms 348 KB ok
23 Correct 0 ms 448 KB ok
24 Correct 0 ms 348 KB ok
25 Correct 1 ms 348 KB ok
26 Correct 1 ms 344 KB ok
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB ok
2 Correct 0 ms 348 KB ok
3 Correct 0 ms 348 KB ok
4 Correct 1 ms 348 KB ok
5 Correct 0 ms 348 KB ok
6 Correct 0 ms 348 KB ok
7 Correct 0 ms 348 KB ok
8 Correct 0 ms 348 KB ok
9 Correct 1 ms 348 KB ok
10 Correct 1 ms 348 KB ok
11 Correct 0 ms 348 KB ok
12 Correct 0 ms 348 KB ok
13 Correct 1 ms 348 KB ok
14 Correct 1 ms 344 KB ok
15 Correct 0 ms 440 KB ok
16 Correct 1 ms 348 KB ok
17 Correct 0 ms 344 KB ok
18 Correct 0 ms 444 KB ok
19 Correct 1 ms 344 KB ok
20 Correct 0 ms 348 KB ok
21 Correct 0 ms 444 KB ok
22 Correct 1 ms 348 KB ok
23 Correct 0 ms 444 KB ok
24 Correct 0 ms 348 KB ok
25 Correct 0 ms 448 KB ok
26 Correct 0 ms 348 KB ok
27 Correct 1 ms 348 KB ok
28 Correct 1 ms 344 KB ok
29 Correct 0 ms 348 KB ok
30 Correct 1 ms 860 KB ok
31 Correct 1 ms 856 KB ok
32 Correct 1 ms 860 KB ok
33 Correct 1 ms 604 KB ok
34 Correct 1 ms 604 KB ok
35 Correct 1 ms 856 KB ok
36 Correct 1 ms 860 KB ok
37 Correct 1 ms 860 KB ok
38 Correct 0 ms 604 KB ok
39 Correct 1 ms 604 KB ok
40 Correct 1 ms 604 KB ok
41 Correct 1 ms 860 KB ok
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB ok
2 Correct 0 ms 348 KB ok
3 Correct 0 ms 348 KB ok
4 Correct 1 ms 348 KB ok
5 Correct 0 ms 348 KB ok
6 Correct 0 ms 348 KB ok
7 Correct 0 ms 348 KB ok
8 Correct 0 ms 348 KB ok
9 Correct 1 ms 348 KB ok
10 Correct 1 ms 348 KB ok
11 Correct 0 ms 348 KB ok
12 Correct 0 ms 348 KB ok
13 Correct 1 ms 348 KB ok
14 Correct 1 ms 344 KB ok
15 Correct 0 ms 440 KB ok
16 Correct 1 ms 348 KB ok
17 Correct 0 ms 344 KB ok
18 Correct 0 ms 444 KB ok
19 Correct 1 ms 344 KB ok
20 Correct 0 ms 348 KB ok
21 Correct 0 ms 444 KB ok
22 Correct 1 ms 348 KB ok
23 Correct 0 ms 444 KB ok
24 Correct 0 ms 348 KB ok
25 Correct 0 ms 448 KB ok
26 Correct 0 ms 348 KB ok
27 Correct 1 ms 348 KB ok
28 Correct 1 ms 344 KB ok
29 Correct 0 ms 348 KB ok
30 Correct 1 ms 860 KB ok
31 Correct 1 ms 856 KB ok
32 Correct 1 ms 860 KB ok
33 Correct 1 ms 604 KB ok
34 Correct 1 ms 604 KB ok
35 Correct 1 ms 856 KB ok
36 Correct 1 ms 860 KB ok
37 Correct 1 ms 860 KB ok
38 Correct 0 ms 604 KB ok
39 Correct 1 ms 604 KB ok
40 Correct 1 ms 604 KB ok
41 Correct 1 ms 860 KB ok
42 Correct 166 ms 24856 KB ok
43 Correct 122 ms 22864 KB ok
44 Correct 397 ms 26196 KB ok
45 Correct 441 ms 24912 KB ok
46 Correct 239 ms 26108 KB ok
47 Correct 156 ms 13164 KB ok
48 Correct 144 ms 15188 KB ok
49 Correct 128 ms 15188 KB ok
50 Correct 218 ms 20564 KB ok
51 Correct 185 ms 20076 KB ok
52 Correct 58 ms 14672 KB ok
53 Correct 32 ms 13452 KB ok
54 Correct 58 ms 13636 KB ok
55 Correct 110 ms 14676 KB ok
56 Correct 40 ms 12880 KB ok
57 Correct 303 ms 20636 KB ok
58 Correct 303 ms 21328 KB ok
59 Correct 293 ms 21844 KB ok
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB ok
2 Correct 0 ms 348 KB ok
3 Correct 0 ms 348 KB ok
4 Correct 1 ms 348 KB ok
5 Correct 0 ms 348 KB ok
6 Correct 0 ms 348 KB ok
7 Correct 0 ms 348 KB ok
8 Correct 3 ms 1884 KB ok
9 Correct 122 ms 12896 KB ok
10 Execution timed out 4558 ms 102472 KB Time limit exceeded
11 Halted 0 ms 0 KB -