제출 #1052857

#제출 시각아이디문제언어결과실행 시간메모리
1052857vjudge1Trains (BOI24_trains)C++17
71 / 100
2078 ms6012 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+10,mod=1e9+7; const int SQ=420; ll sm[SQ][SQ]; ll ways[N],suf[N],d[N],x[N]; void solve() { ll n; cin>>n; bool conp=1; for(int i=1;i<=n;i++) { cin>>d[i]>>x[i]; conp&=(x[i]==1e9); ways[i]=1; } suf[n+1]=0; for(int i=n;i>=1;i--) { if(conp) { if(d[i]==0) { ways[i]=1; } else{ if(d[i]<SQ) { ways[i]=(1+sm[d[i]][i%d[i]])%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[j][i%j]=(sm[j][i%j]+ways[i])%mod; } } else{ if(d[i]==1) { int j=min(n,i+x[i]); ways[i] =(((suf[i+1]-suf[j+1])%mod)+mod)%mod; ways[i] = (ways[i]+1)%mod; } else{ if(d[i]>1){ for(int t=1;t<=x[i] and (i+(d[i]*t))<=n;t++) { ways[i]=(ways[i]+ways[i+(d[i]*t)])%mod; } } } suf[i]=(suf[i+1]+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...