Submission #1052867

#TimeUsernameProblemLanguageResultExecution timeMemory
1052867vjudge1Trains (BOI24_trains)C++17
100 / 100
83 ms252644 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define vll vector<ll> #define all(x) begin(x),end(x) #define pb push_back const int N=1e5+500,mod=1e9+7; const int SQ=317; ll sm[N][SQ]; ll ways[N],d[N],x[N]; void solve() { ll n; cin>>n; for(int i=1;i<=n;i++) { cin>>d[i]>>x[i]; ways[i]=1; } for(int i=n;i>=1;i--) { if(d[i]==0) { ways[i]=1; } else{ if(d[i]<SQ) { ll j=i+(x[i]*d[i]); // maximum x such x<=n and x%d[i] == i%d[i] // y = i%d[i] //x = k*d + y // (k*d) + y <=n // i + (k*d) <= n // (k)<= (n-i)/d ll ny=(((n-i)/d[i])*d[i]) + i; ny=min(ny,j); ways[i]=(((sm[i+d[i]][d[i]]-sm[ny+d[i]][d[i]])%mod)+mod)%mod; ways[i] = (ways[i]+1)%mod; } else { for(int t=1;t<=x[i] and (i+(d[i]*t))<=n;t++) ways[i]=(ways[i]+ways[i+(d[i]*t)])%mod; } } for(int j=1;j<SQ;j++) sm[i][j]=(sm[i+j][j]+ways[i])%mod; } cout<<ways[1]%mod<<endl; } int main() { cin.tie(0);cout.tie(0); ios::sync_with_stdio(0); int t=1; // cin>>t; while(t--) 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...