Submission #979940

#TimeUsernameProblemLanguageResultExecution timeMemory
979940vjudge1Soccer Stadium (IOI23_soccer)C++17
0 / 100
4539 ms2644 KiB
#include "soccer.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vi = vector <int>;
using vvi = vector <vi>;
using vll = vector <ll>;

int biggest_stadium (int n, vvi f) {
    ll ans = 0;
    for (ll i = 0; i < n; i++) for (ll j = 0; j < n; j++) {
        if (f[i][j]) continue;
        ll l = j, r = j;
        while (l > 0 && !f[i][l-1]) l--;
        while (r < n-1 && !f[i][r+1]) r++;
        ll li = l, ri = r;
        ll pans = 0;
        for (ll ii = i; ii >= 0; ii--) {
            if (f[ii][j]) break;
            for (ll jj = li; jj <= j; jj++) {
                if (f[ii][jj]) li = jj+1;
            }
            for (ll jj = ri; jj >= j; jj--) {
                if (f[ii][jj]) ri = jj-1;
            }
            assert(li <= ri);
            pans += ri-li+1;
        }
        li = l, ri = r;
        for (ll ii = i+1; ii < n; ii++) {
            if (f[ii][j]) break;
            for (ll jj = li; jj <= j; jj++) {
                if (f[ii][jj]) li = jj+1;
            }
            for (ll jj = ri; jj >= j; jj--) {
                if (f[ii][jj]) ri = jj-1;
            }
            assert(li <= ri);
            pans += ri-li+1;
        }
        ans = max(ans, pans);
    }
    for (ll i = 0; i < n; i++) {
        for (ll j = 0; j < i; j++) {
            swap(f[i][j], f[j][i]);
        }
    }
    for (ll i = 0; i < n; i++) for (ll j = 0; j < n; j++) {
        if (f[i][j]) continue;
        ll l = j, r = j;
        while (l > 0 && !f[i][l-1]) l--;
        while (r < n-1 && !f[i][r+1]) r++;
        ll li = l, ri = r;
        ll pans = 0;
        for (ll ii = i; ii >= 0; ii--) {
            if (f[ii][j]) break;
            for (ll jj = li; jj <= j; jj++) {
                if (f[ii][jj]) li = jj+1;
            }
            for (ll jj = ri; jj >= j; jj--) {
                if (f[ii][jj]) ri = jj-1;
            }
            assert(li <= ri);
            pans += ri-li+1;
        }
        li = l, ri = r;
        for (ll ii = i+1; ii < n; ii++) {
            if (f[ii][j]) break;
            for (ll jj = li; jj <= j; jj++) {
                if (f[ii][jj]) li = jj+1;
            }
            for (ll jj = ri; jj >= j; jj--) {
                if (f[ii][jj]) ri = jj-1;
            }
            assert(li <= ri);
            pans += ri-li+1;
        }
        ans = max(ans, pans);
    }
    return int(ans);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...