제출 #1311987

#제출 시각아이디문제언어결과실행 시간메모리
1311987samarthkulkarniLasers (NOI19_lasers)C++20
100 / 100
101 ms35588 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define vi vector<long long> #define all(x) x.begin(), x.end() #define endl "\n" #define pr pair<ll, ll> #define ff first #define ss second void solution(); int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); solution(); return 0; } void solution() { ll L, R; cin >> L >> R; vector<vi> walls(R); for (int i = 0; i < R; i++) { ll x; cin >> x; walls[i].resize(x); for (ll &z : walls[i]) cin >> z; } vector<pr> cant; for (int i = 0; i < R; i++) { ll sum = accumulate(all(walls[i]), 0ll); ll dif = L-sum+1; for (int j = walls[i].size()-1; j >= 0; j--) { ll r = sum; sum -= walls[i][j]; ll l = sum + dif; if (l <= r) cant.push_back({l, r}); } } if (cant.size() == 0) { cout << 0 << endl; return; } sort(all(cant)); vector<pr> nw; ll l = cant[0].ff, r = cant[0].ss; for (auto [x, y] : cant) { if (x <= r) r = max(r, y); else { nw.push_back({l, r}); l = x; r = y; } } nw.push_back({l, r}); ll ans = 0; for (auto [x, y] : nw) { ans += y-x+1; } cout << ans << endl; }
#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...