제출 #1165883

#제출 시각아이디문제언어결과실행 시간메모리
1165883Math4Life2020Trains (BOI24_trains)C++20
100 / 100
207 ms239480 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long; using pii = pair<ll,ll>;
const ll p = 1e9+7;
const ll K = 300;
const ll Nm = 2e5;

ll pfs[K+1][Nm];
ll dp[Nm];

int main() {
	ios_base::sync_with_stdio(false); cin.tie(0);
    ll N; cin >> N;
    vector<pii> vinp;
    for (ll i=0;i<N;i++){
        ll d,x; cin >> d >> x;
        vinp.push_back({d,x});
    }
    for (ll i=(N-1);i>=0;i--) {
        ll ans = 1;
        ll d = vinp[i].first; ll x = vinp[i].second;
        if (d>=1 && d<=K) {
            ll tmax = i+d*(x+1);
            if (tmax>=N) {
                tmax = N;
            }
            ans += p+pfs[d][i+d]-pfs[d][tmax];
        }
        if (d>K) {
            for (ll T=(i+d);T<N && (T-i)/d<=x; T+=d) {
                ans += dp[T];
            }
        }
        ans = ans%p;
        dp[i]=ans;
        for (ll k=1;k<=K;k++) {
            pfs[k][i]=(ans+pfs[k][i+k])%p;
        }
    }
    cout << dp[0] <<"\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...