Submission #839793

#TimeUsernameProblemLanguageResultExecution timeMemory
839793model_codeSoccer Stadium (IOI23_soccer)C++17
25 / 100
389 ms31824 KiB
// partially_correct/sol_db_check_fast.cpp #include "soccer.h" #include <iostream> #include <array> #include <map> #include <algorithm> #include <cassert> #include <string.h> #define xx first #define yy second using namespace std; typedef pair<int, int> pii; const int maxN = 2003; int minr[maxN], maxl[maxN]; vector<pii> ivals; int biggest_stadium(int N, vector<vector<int>> C) { fill(minr, minr + maxN, maxN); for (int i = 0; i < N; ++i) { int l = N, r = -1; for (int j = 0; j < N; ++j) { if (C[i][j] == 0) { l = min(l, j); r = max(r, j); } } l++, r++; minr[l] = min(minr[l], r); maxl[r] = max(maxl[r], l); ivals.push_back({l, r}); } for (int i = N; i >= 1; --i) { maxl[i] = max(maxl[i + 1], maxl[i]); } for (int i = 1; i <= N; ++i) { minr[i] = min(minr[i - 1], minr[i]); } int sum = 0; for (int i = 1; i < N - 1; ++i) { pii p = ivals[i - 1]; pii q = ivals[i]; pii r = ivals[i + 1]; if (q.yy - q.xx < p.yy - p.xx && q.yy - q.xx < r.yy - r.xx) { return 0; } } for (auto q : ivals) { if (q.yy == 0) { continue; } int L = q.xx, R = q.yy; if (maxl[R + 1] > L || minr[L - 1] < R) { return 0; } sum += R - L + 1; } return sum; }
#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...