제출 #1002144

#제출 시각아이디문제언어결과실행 시간메모리
1002144Khanhcsp2Trains (BOI24_trains)C++14
100 / 100
320 ms404560 KiB
#include<bits/stdc++.h> #define el '\n' #define fi first #define sc second #define int ll #define pii pair<int, int> #define all(v) v.begin(), v.end() using namespace std; using ll=long long; using ull=unsigned long long; using ld=long double; const int mod=1e9+7; const int N=1e5+11; int n, d[N], x[N], dp[N], pfs[N][511]; void sol() { cin >> n; for(int i=1; i<=n; i++) cin >> d[i] >> x[i]; for(int i=n; i>=1; i--) { dp[i]=1; if(d[i]>=500) for(int j=1; j<=x[i] && i+j*d[i]<=n; j++) dp[i]=(dp[i]+dp[i+j*d[i]])%mod; else if(d[i]) { if(i+d[i]<=n) dp[i]=(dp[i]+pfs[i+d[i]][d[i]])%mod; if(i+d[i]*(x[i]+1)<=n) dp[i]=(dp[i]-pfs[i+d[i]*(x[i]+1)][d[i]])%mod; } for(int j=1;j<500;j++) { pfs[i][j]=dp[i]; if(i+j<=n) pfs[i][j]=(pfs[i][j]+pfs[i+j][j])%mod; } } cout << (dp[1]+mod)%mod; } signed main() { // freopen("divisor.INP", "r", stdin); // freopen("divisor.OUT", "w", stdout); ios_base::sync_with_stdio(0); cin.tie(0); int t=1; //cin >> t; while(t--) { sol(); } }
#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...