Submission #1063215

#TimeUsernameProblemLanguageResultExecution timeMemory
1063215antonTrains (BOI24_trains)C++17
100 / 100
212 ms29380 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define pii pair<int, int> const int MAX_N = 1e5 + 10; const int MOD = 1e9+7; const int K = 300; int N; int d[MAX_N]; int x[MAX_N]; int dp[MAX_N]; int sufs[K][K]; vector<unordered_map<int, int>> req; signed main(){ cin>>N; req.resize(N+1); for(int i = 0; i<N; i++){ cin>>d[i]>>x[i]; req[i][d[i]] = -1; req[min(N, i+d[i]*x[i])][d[i]] = -1; } for(auto it = req[N].begin(); it!=req[N].end(); ++it){ it->second = 0; } fill(&sufs[0][0], &sufs[K-1][K], 0LL); for(int i = N-1; i>=0; i--){ for(auto it = req[i].begin(); it!=req[i].end(); ++it){ int cur_d = it->first; int res = 0; if(cur_d!=0){ if(cur_d<K){ res = (res + sufs[cur_d][i%cur_d])%MOD; } else{ for(int j = i+cur_d; j<N; j+=cur_d){ res =(res+dp[j])%MOD; } } } it->second = res; } dp[i] = (req[i][d[i]]-req[min(N, i+x[i]*d[i])][d[i]]+MOD+1)%MOD; for(int j = 1; j<K; j++){ sufs[j][i%j] = (sufs[j][i%j] + dp[i])%MOD; } } cout<<dp[0]<<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...