Submission #1316174

#TimeUsernameProblemLanguageResultExecution timeMemory
13161741otaLasers (NOI19_lasers)C++20
100 / 100
223 ms60548 KiB
#include <bits/stdc++.h> using namespace std; #define endl "\n" #define int long long #define pii pair<int, int> #define ff first #define ss second #define entire(x) (x).begin(), (x).end() int32_t main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int m, n; cin >> m >> n; // m = row size vector<vector<int>> row(n); for (int i = 0; i < n; i++){ int x; cin >> x; for (int j = 0, w; j < x; j++) cin >> w, row[i].push_back(w); } // only the regions with interval depth n will survive // start === {coord, 1}, end === {coord, -1} // [start, end) vector<pii> safe; auto solve = [&](vector<int> a){ int nr = (int) a.size(); int bef = 0, aft = accumulate(entire(a), 0ll); safe.push_back(pii{0, 1}); safe.push_back(pii{m - aft, -1}); int pos = m - aft; for (int i = 0; i < nr; i++){ bef += a[i]; aft -= a[i]; pos = max(pos, bef); safe.push_back(pii{pos, 1}); pos = m - aft; safe.push_back(pii{pos, -1}); } }; for (auto a : row) solve(a); sort(entire(safe)); int depth = 0, last = 0, ans = 0; for (auto [pos, type] : safe){ if (type == 1) { depth++, last = pos; continue; } if (type == -1) { if (depth == n) ans += pos - last; last = pos; depth--; } } cout << m - ans << endl; return 0; }
#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...