Submission #1241792

#TimeUsernameProblemLanguageResultExecution timeMemory
1241792minhpkTrains (BOI24_trains)C++20
100 / 100
152 ms9428 KiB
#include <bits/stdc++.h> #define int long long using namespace std; signed main(){ ios::sync_with_stdio(false); cin.tie(NULL); int a; cin >> a; int blk = 320; vector<vector<int>> val(blk+5, vector<int>(blk+5)); vector<vector<pair<int, pair<int,int>>>> pos(a+5); vector<int> dp(a+5); vector<pair<int,int>> z(a+5); int MOD = 1000000007; dp[1] = 1; for(int i = 1; i <= a; i++){ int x, y; cin >> x >> y; z[i] = {x, y}; if(x < blk && x!=0){ int end = min(i + x * y + 1, a + 1LL); pos[end].push_back({x, {i % x, i}}); } // cerr << "ok" << "\n"; } for(int i = 1; i <= a; i++){ for(auto &p : pos[i]){ val[p.first][p.second.first] = (val[p.first][p.second.first] - dp[p.second.second] + MOD) % MOD; } for(int x = 1; x <= blk; x++){ dp[i] = (dp[i] + val[x][i % x]) % MOD; } int x = z[i].first, y = z[i].second; if(x > blk){ for(int j = 1; j <= y; j++){ int nxt = i + j * x; if(nxt > a) break; dp[nxt] = (dp[nxt] + dp[i]) % MOD; } } else { if (x==0){ continue; } val[x][i % x] = (val[x][i % x] + dp[i]) % MOD; } // cerr << i << "\n"; } long long sum = 0; for(int i = 1; i <= a; i++){ sum = (sum + dp[i]) % MOD; } cout << sum << "\n"; 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...