Submission #1194322

#TimeUsernameProblemLanguageResultExecution timeMemory
1194322UnforgettableplTrains (BOI24_trains)C++20
8 / 100
323 ms4220 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

const int SQRT = 0;

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];
            DP[i]+=prefix[i][j];
        }
        ans+=DP[i];
        if(d[i]<=SQRT){
            prefix[i][d[i]]+=DP[i];
            if(i+(x[i]+1ll)*d[i]<=N)prefix[i+(x[i]+1ll)*d[i]][d[i]]-=DP[i];
        } else {
            for(int j=1;j<=x[i];j++){
                if(j*d[i]+i>N)break;
                DP[j*d[i]+i]+=DP[i];
            }
        }
    }
    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...