Submission #1206940

#TimeUsernameProblemLanguageResultExecution timeMemory
1206940PekibanSoccer Stadium (IOI23_soccer)C++20
8 / 100
191 ms31772 KiB
#include "soccer.h"
#include <bits/stdc++.h>

using namespace std;
#define pb push_back

int biggest_stadium(int n, vector<vector<int>> F) {
    int x = -1, y = -1, c = 0;
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            if (F[i][j])    x = i, y = j, ++c;
        }
    }
    if (c == 1) {
        if (x == -1 && y == -1) return n*n;
        return n*n - min(x+1, n-x) * min(y+1, n-y);
    }
    int mn[n], mx[n];
    fill(mn, mn+n, 1e9);
    fill(mx, mx+n, -1);
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            if (!F[i][j])    mn[i] = min(mn[i], j), mx[i] = max(mx[i], j);
        }
    }
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            if (F[i][j] && mn[i] <= j && j <= mx[i])    return -1;
        }
    }
    for (int i = 0; i < n-1; ++i) {
        if (!(mn[i] <= mn[i+1] && mx[i+1] <= mx[i]) && !(mn[i+1] <= mn[i] && mx[i] <= mx[i+1])) return -1;
    }
    fill(mn, mn+n, 1e9);
    fill(mx, mx+n, -1);
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            if (!F[j][i])    mn[i] = min(mn[i], j), mx[i] = max(mx[i], j);
        }
    }
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            if (F[j][i] && mn[i] <= j && j <= mx[i])    return -1;
        }
    }
    for (int i = 0; i < n-1; ++i) {
        if (!(mn[i] <= mn[i+1] && mx[i+1] <= mx[i]) && !(mn[i+1] <= mn[i] && mx[i] <= mx[i+1])) return -1;
    }
    vector<array<int, 2>> v;
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            if (!F[i][j] && (min({i, n-i-1, j, n-j-1}) == 0 || (!F[i+1][j] && !F[i-1][j] && !F[i][j-1] && !F[i][j+1])))   v.pb({i, j});
        }
    }
    for (auto [x1, y1] : v) {
        for (auto [x2, y2] : v) {
            if (F[x1][y2] && F[x2][y1]) return -1;
        }
    }
    return n*n - c;
}
#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...