Submission #1080575

#TimeUsernameProblemLanguageResultExecution timeMemory
1080575shmaxSoccer Stadium (IOI23_soccer)C++17
6 / 100
391 ms56148 KiB
#include "soccer.h" #include "bits/stdc++.h" using namespace std; using i32 = int; #define int long long #define len(x) (int)(x.size()) #define all(x) x.begin(), x.end() #define inf 1000'000'000'000'000'000LL #define bit(x, i) (((x) >> i) & 1) template<typename T> using vec = vector<T>; int check(i32 n, std::vector<std::vector<i32>> F) { int cnt = 0; set<int> columns; set<int> rows; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cnt += F[i][j] == 0; if (F[i][j] == 0) { rows.insert(i); columns.insert(j); } } } vec<vec<bool>> used(n, vec<bool>(n, false)); for (int i = 1; i < n; i++) { for (int j = 0; j < n; j++) { if (used[i][j]) continue; if (!F[i][j]) continue; if (F[i - 1][j] == 0) { for (int k = i; k < n; k++) { if (F[k][j] == 0) return 0; used[k][j] = true; } } } } used = vec<vec<bool>>(n, vec<bool>(n, false)); for (int i = 0; i < n; i++) { for (int j = 1; j < n; j++) { if (used[i][j]) continue; if (!F[i][j]) continue; if (F[i][j - 1] == 0) { for (int k = j; k < n; k++) { if (F[i][k] == 0) return 0; used[i][k] = true; } } } } vec<vec<int>> pref(n + 1, vec<int>(n + 1, 0)); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { pref[i + 1][j + 1] = pref[i][j + 1] + pref[i + 1][j] - pref[i][j] + F[i][j]; } } auto get = [&](int i1, int j1, int i2, int j2) { return pref[i2 + 1][j2 + 1] - pref[i2 + 1][j1] - pref[i1][j2 + 1] + pref[i1][j1]; }; vec<pair<int, int>> X(n, {inf, -inf}); vec<pair<int, int>> Y(n, {inf, -inf}); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (F[i][j]) continue; X[i].first = min(X[i].first, j); X[i].second = max(X[i].first, j); Y[j].first = min(Y[j].first, i); Y[j].second = max(Y[j].first, i); } } for (int i: rows) { for (int j: columns) { if (F[i][j] == 0) continue; int i1 = Y[j].first; int i2 = Y[j].second; int j1 = X[i].first; int j2 = X[i].second; if (get(i1, j1, i2, j2) != 0) return 0; } } return cnt; } i32 biggest_stadium(i32 n, std::vector<std::vector<i32>> F) { if (check(n, F) != 0) return check(n, F); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (F[i][j] == 1) { int best = 0; best = max(best, n * n - (i + 1) * (j + 1)); best = max(best, n * n - (i + 1) * (n - j)); best = max(best, n * n - (n - i) * (j + 1)); best = max(best, n * n - (n - i) * (n - j)); return best; } } } }

Compilation message (stderr)

soccer.cpp: In function 'i32 biggest_stadium(i32, std::vector<std::vector<int> >)':
soccer.cpp:112:1: warning: control reaches end of non-void function [-Wreturn-type]
  112 | }
      | ^
#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...