Submission #1033572

#TimeUsernameProblemLanguageResultExecution timeMemory
1033572coin_Trains (BOI24_trains)C++14
100 / 100
285 ms280916 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int maxn = 1e5 + 6, mod = 1e9 + 7, block = 350;
vector<int> dp(maxn, 0);
vector<vector<int>> sums(maxn, vector<int>(block, 0));

// for j : 1 -> block,  sum[i][j] += DP[i]+sum[i+j][j]

signed main(){
    cin.tie(nullptr) -> sync_with_stdio(0);
    int n;
    cin >> n;
    int d[n+1], x[n+1];
    for (int i = 1; i <= n; i++){
        cin >> d[i] >> x[i];
    }
    int sum = 0;
    for (int i = n; i >= 1; i--){
        dp[i]=1;
        if (d[i] != 0){
            if (d[i] >= block){
                for (int t = 1; t <= x[i] && i + t*d[i] <= n; t++){
                    int u = i + t*d[i];
                    dp[i] = (dp[u] + dp[i]) % mod;
                }
            }
            else{
                if (i + d[i] <= n){
                    int sumprefix = sums[i+d[i]][d[i]];
                    int sub = 0;
                    if (i + (x[i]+1)*d[i] <= n){
                        sub = sums[i + (x[i]+1)*d[i]][d[i]];
                    }
                    dp[i] += (sumprefix - sub + mod)%mod;
                }
            }
        }
        for (int j = 1; j < block; j++){
            sums[i][j] = dp[i];
            if (i + j <= n){
                sums[i][j] += sums[i+j][j];
                sums[i][j] %= mod;
            }
        }
    }
    cout << dp[1];
}

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:19:9: warning: unused variable 'sum' [-Wunused-variable]
   19 |     int sum = 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...