Submission #1269151

#TimeUsernameProblemLanguageResultExecution timeMemory
1269151dostsTrains (BOI24_trains)C++20
100 / 100
1260 ms6608 KiB
#include <bits/stdc++.h> #define int long long #define vi vector<int> #define pii pair<int,int> #define ff first #define ss second #define sp << " " << #define all(x) x.begin(),x.end() using namespace std; const int N = 3e5+1,inf = 2e18,MOD = 1e9+7; int add(int x,int y) { if (x+y >= MOD) return x+y-MOD; return x+y; } const int B = 2; int lazy[B+1][B]{}; void solve() { int n; cin >> n; vi d(n+1),x(n+1); for (int i=1;i<=n;i++) { cin >> d[i] >> x[i]; } vector<pair<pii,int>> upds[n+1]; vi dp(n+1,0); int ans = 0; for (int i=1;i<=n;i++) { if (i>1){ for (auto it : upds[i]) lazy[it.ff.ff][it.ff.ss]=add(lazy[it.ff.ff][it.ff.ss],MOD-it.ss); } else dp[i] = 1; for (int j=1;j<=B;j++) dp[i] = add(dp[i],lazy[j][i%j]); ans = add(ans,dp[i]); if (!d[i]) continue; if (d[i]+i > n) continue; if (d[i] > B) { for (int j = i+d[i],ctr = 1;j<=n && ctr <= x[i];j+=d[i],ctr++) { dp[j] = add(dp[j],dp[i]); } } else { lazy[d[i]][i%d[i]]=add(lazy[d[i]][i%d[i]],dp[i]); if (i+(x[i]+1)*d[i] <= n) upds[i+(x[i]+1)*d[i]].push_back({{d[i],i%d[i]},dp[i]}); } } cout << ans << '\n'; } signed main() { ios_base::sync_with_stdio(0),cin.tie(0); #ifdef Dodi freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); #endif int t = 1; // cin >> t; while (t --> 0) solve(); }
#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...