Submission #1104935

#TimeUsernameProblemLanguageResultExecution timeMemory
1104935alexddTrains (BOI24_trains)C++17
0 / 100
456 ms748992 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int MOD = 1e9+7; const int LIM = 300; int n; set<int> tole[100005]; int dp[100005]; vector<int> events[100005][LIM+5]; signed main() { ios_base::sync_with_stdio(0);cin.tie(0); cin>>n; int d,x; for(int i=1;i<=n;i++) { cin>>d>>x; if(d==0 || x==0 || i+d>n) continue; if(d<=LIM) { int ri = i + min((n-i)/d,x)*d; events[i+d][d].push_back(i); if(ri+d<=n) events[ri+d][d].push_back(-i); } else { for(int j=1;j<=x;j++) { if(i+j*d>n) break; tole[i+j*d].insert(i); } } } dp[1]=1; int rez=1; set<int> s[LIM+5]; for(int i=2;i<=n;i++) { for(int j=1;j<=LIM;j++) { for(int e:events[i][j]) { if(e>0) { s[j].insert(e); } else { e = -e; s[j].erase(e); } } if(!s[j].empty()) { tole[i].insert(*s[j].begin()); } } for(int j:tole[i]) { dp[i] = (dp[i] + dp[j])%MOD; } rez = (rez + dp[i])%MOD; } cout<<rez; 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...