Submission #1370641

#TimeUsernameProblemLanguageResultExecution timeMemory
1370641leolin0214Soccer Stadium (IOI23_soccer)C++20
1.50 / 100
151 ms63256 KiB
#include "soccer.h"

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <map>

#define pii pair<int, int>
#define ff first
#define ss second

using namespace std;

int biggest_stadium(int N, std::vector<std::vector<int>> F) {
    int n = N;

    auto check = [&] (int n, vector<vector<int>> f) -> bool {
        vector<pair<int, int>> seg;
        for (int i=0; i<n; i++) {
            int l = n, r = -1;
            for (int j=0; j<n; j++) if (f[i][j] == 0) r = j;
            for (int j=n-1; j>=0; j--) if (f[i][j] == 0) l = j;
            for (int j=l; j<=r; j++) if (f[i][j] == 1) return false;
            seg.push_back({l, r});
        }

        auto [pl, pr] = seg[0];
        bool flag = false;
        for (auto [l, r]: seg) {
            if (l <= pl && pr <= r) {
                if (flag) return false;
            }else if (pl <= l && r <= pr) {
                flag = true;
            }else{
                return false;
            }
            pl = l, pr = r;
        }

        return true;
    };

    int cnt = 0;
    vector<vector<int>> G(n, vector<int>(n));
    for (int i=0; i<n; i++) for (int j=0; j<n; j++) G[j][i] = F[i][j];
    for (int i=0; i<n; i++) for (int j=0; j<n; j++) cnt += 1 - F[i][j];

    if (check(n, F) && check(n, G)) {
        return cnt;
    }else{
        return 0;
    }
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...