제출 #1037966

#제출 시각아이디문제언어결과실행 시간메모리
1037966ZicrusSoccer Stadium (IOI23_soccer)C++17
3.50 / 100
190 ms31776 KiB
#include <bits/stdc++.h>
#include "soccer.h"
using namespace std;

typedef long long ll;

int biggest_stadium(int n, vector<vector<int>> f) {
    vector<pair<ll, ll>> v(n, {-1, -1}), h(n, {-1, -1});
    ll num = 0;
    bool done = false;
    pair<ll, ll> prev = {-1, -1};
    bool dec = false;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (!f[i][j]) {
                if (done) return 0;
                if (v[i].first == -1) v[i].first = j;
                if (j - v[i].second > 1 && v[i].second != -1) return 0;
                v[i].second = j;
                num++;
            }
        }
        if (v[i].first == -1 && num > 0) done = true;
        if (prev.first == -1) {
            prev = v[i];
            continue;
        }
        if (v[i].first == -1) continue;
        if (v[i].first > prev.first && v[i].second > prev.second) return 0;
        if (v[i].first < prev.first && v[i].second < prev.second) return 0;
        if (dec && (v[i].first < prev.first || v[i].second > prev.second)) return 0;
        if (!dec && (v[i].first > prev.first || v[i].second < prev.second)) dec = true;
    }
    num = 0;
    done = false;
    prev = {-1, -1};
    dec = false;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (!f[j][i]) {
                if (done) return 0;
                if (h[i].first == -1) h[i].first = j;
                if (j - h[i].second > 1 && h[i].second != -1) return 0;
                h[i].second = j;
                num++;
            }
        }
        if (h[i].first == -1 && num > 0) done = true;
        if (prev.first == -1) {
            prev = h[i];
            continue;
        }
        if (h[i].first == -1) continue;
        if (h[i].first > prev.first && h[i].second > prev.second) return 0;
        if (h[i].first < prev.first && h[i].second < prev.second) return 0;
        if (dec && (h[i].first < prev.first || h[i].second > prev.second)) return 0;
        if (!dec && (h[i].first > prev.first || h[i].second < prev.second)) dec = true;
    }

    return num;
}
#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...