Submission #1194323

#TimeUsernameProblemLanguageResultExecution timeMemory
1194323UnforgettableplTrains (BOI24_trains)C++20
100 / 100
453 ms398104 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int SQRT = 500; const int modulo = 1e9+7; int32_t main(int32_t argc,char* argv[]){ ios_base::sync_with_stdio(false); cin.tie(nullptr); int N; cin >> N; vector<int> d(N+1); vector<int> x(N+1); for(int i=1;i<=N;i++){ cin >> d[i] >> x[i]; } vector<int> DP(N+1); vector prefix(N+1,vector<int>(SQRT+1)); DP[1]++; int ans = 0; for(int i=1;i<=N;i++){ for(int j=1;j<=SQRT;j++){ if(i-j<0)continue; prefix[i][j]+=prefix[i-j][j]; prefix[i][j]%=modulo; DP[i]+=prefix[i][j]; DP[i]%=modulo; } ans+=DP[i]; ans%=modulo; if(d[i]<=SQRT){ prefix[i][d[i]]+=DP[i]; prefix[i][d[i]]%=modulo; if(i+(x[i]+1ll)*d[i]<=N){ prefix[i+(x[i]+1ll)*d[i]][d[i]]+=modulo-DP[i]; prefix[i+(x[i]+1ll)*d[i]][d[i]]%=modulo; } } else { for(int j=1;j<=x[i];j++){ if(j*d[i]+i>N)break; DP[j*d[i]+i]+=DP[i]; DP[j*d[i]+i]%=modulo; } } } cout << ans << '\n'; }
#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...