제출 #1343402

#제출 시각아이디문제언어결과실행 시간메모리
1343402allin27x축구 경기장 (IOI23_soccer)C++17
25 / 100
211 ms31880 KiB
#include "soccer.h"
#include <bits/stdc++.h>
using namespace std;



int biggest_stadium(int n, std::vector<std::vector<int>> A)
{
    int rt=0; for (int i=0; i<n; i++) for (int j=0; j<n; j++) rt += !A[i][j];
    vector<array<int,2>> rg(n);
    for (int i=0; i<n; i++){
        int mn = n,mx=-1, nr =0;
        for (int j=0; j<n; j++){
            if (A[i][j]) continue;
            mn = min(mn, j); mx = max(mx, j); nr++;
        }
        if (mx!=-1 && mx-mn+1 != nr) return 0;
        rg[i] = {mn, mx};
    }
    int mn=n,mx=-1,nr=0;
    for (int i=0; i<n; i++){
        if (rg[i][0] > rg[i][1]) continue;
        mn = min(mn, i); mx = max(mx, i); nr++;
    }
    if (mx-mn+1!= nr) return 0;

    int sw = 0;
    for (int i=mn; i<mx; i++){
        if (!sw && rg[i][0]>=rg[i+1][0] && rg[i][1]<=rg[i+1][1]) continue;
        else if (!sw && rg[i+1][0]>=rg[i][0] && rg[i+1][1]<=rg[i][1]) sw=1;
        else if (sw && rg[i+1][0]>=rg[i][0] && rg[i+1][1]<=rg[i][1]) continue;
        else return 0;
    }

    for (int i=mn; i<=mx; i++){
        for (int j=i+1; j<=mx; j++){
            if (rg[i][0]>=rg[j][0] && rg[i][1]<=rg[j][1]) continue;
            else if (rg[j][0]>=rg[i][0] && rg[j][1]<=rg[i][1]) continue;
            else return 0;
        }
    }
    return rt;
}
#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...