제출 #1233642

#제출 시각아이디문제언어결과실행 시간메모리
1233642AriadnaTrains (BOI24_trains)C++20
16 / 100
347 ms251376 KiB
#include <bits/stdc++.h> #define ll long long using namespace std; const int mod = 1e9+7, N = 1e5, S = 317; ll dp[N]; int main() { int n; cin >> n; vector<int> d(n), x(n); for (int i = 0; i < n; ++i) cin >> d[i] >> x[i]; vector<int> final(n); for (int i = 0; i < n; ++i) final[i] = min(n, i+d[i]*(x[i]+1)); dp[n-1] = 1; vector<vector<ll>> suff(S, vector<ll>(n+1, 0)); for (int i = n-1; i >= 0; --i) { if (d[i] >= S) { dp[i] = 1; for (int j = i+d[i]; j <= i+d[i]*x[i]; j+=d[i]) { dp[i] += dp[j]; dp[i] %= mod; } } else if (d[i] > 0) { dp[i] = (1+suff[d[i]][i+d[i]]-suff[d[i]][final[i]]+mod)%mod; } for (int j = 1; j < S; ++j) suff[j][i] = (suff[j][min(n, i+j)]+dp[i])%mod; } cout << dp[0] << endl; 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...