Submission #1158602

#TimeUsernameProblemLanguageResultExecution timeMemory
1158602The_SamuraiSoccer Stadium (IOI23_soccer)C++20
0 / 100
4593 ms1748 KiB
#include "soccer.h" #include "bits/stdc++.h" using namespace std; struct dsu { vector<int> p, size; void init(int n) { p.assign(n + 1, 0); size.assign(n + 1, 1); for (int i = 1; i <= n; i++) p[i] = i; } int get(int a) { return (p[a] == a ? a : p[a] = get(p[a])); } void add(int a, int b) { a = get(a); b = get(b); if (a == b) return; if (size[a] > size[b]) swap(a, b); size[b] += size[a]; p[a] = b; } }; void maxs(int &a, int b) { if (a < b) a = b; } int biggest_stadium(int n, std::vector<std::vector<int>> a) { vector<vector<pair<int, int>>> ranges(n); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (a[i][j]) continue; if (ranges[i].empty() or ranges[i].back().second + 1 < j) { ranges[i].emplace_back(j, j); } else { ranges[i].back().second++; } } } map<tuple<int, int, bool>, int> mp; for (int x = 0; x < n; x++) { if (ranges[x].empty()) continue; if (mp.empty()) { for (auto [l, r]: ranges[x]) { for (int i = l; i <= r; i++) for (int j = i; j <= r; j++) { mp[{i, j, false}] = mp[{i, j, true}] = j - i + 1; } } continue; } map<tuple<int, int, bool>, int> nw; for (auto [l, r]: ranges[x]) { for (int i = l; i <= r; i++) for (int j = i; j <= r; j++) { nw[{i, j, false}] = nw[{i, j, true}] = j - i + 1; int ln = j - i + 1; for (auto [it, val]: mp) { auto [l2, r2, tp] = it; if (tp) { // opening -> opening if (i <= l2 and r2 <= j) maxs(nw[{i, j, true}], val + ln); } // opening/closing -> closing if (!(l2 <= i and j <= r2)) continue; maxs(nw[{i, j, false}], val + ln); } } } swap(nw, mp); } int ans = 0; for (auto [it, val]: mp) ans = max(ans, val); return ans; }
#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...