Submission #1268123

#TimeUsernameProblemLanguageResultExecution timeMemory
1268123nguyenkhangxTrains (BOI24_trains)C++20
100 / 100
111 ms125312 KiB
#include <bits/stdc++.h> #define task "a" using namespace std; using ll = long long; const int MOD = 1000000007; int dp[100009], d[100009], x[100009]; int S[329][100009]; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); if(fopen(task".inp","r")){ freopen(task".inp","r",stdin); freopen(task".out","w",stdout); } int N; if(!(cin >> N)) return 0; for(int i=1;i<=N;i++) cin >> d[i] >> x[i]; int B = max(1, (int)sqrt(N)); for(int i=N;i>=1;--i){ if(d[i] == 0){ dp[i] = 1; } else { int dd = d[i]; int m = min(x[i], (N - i) / dd); ll sum = 0; if(dd <= B){ int idx1 = i + dd; int idx2 = i + (m + 1) * dd; if(idx1 <= N){ sum = S[dd][idx1]; if(idx2 <= N) sum = (sum - S[dd][idx2] + MOD) % MOD; } else sum = 0; } else { for(int k=1;k<=m;k++){ sum += dp[i + k*dd]; if(sum >= MOD) sum -= MOD; } } dp[i] = (1 + sum) % MOD; } // --- FIX: update S[dd][i] for ALL dd = 1..B --- for(int dd = 1; dd <= B; ++dd){ int val = dp[i]; if(i + dd <= N) { val += S[dd][i + dd]; if(val >= MOD) val -= MOD; } S[dd][i] = val; } } cout << dp[1] % MOD << '\n'; return 0; }

Compilation message (stderr)

Main.cpp: In function 'int main()':
Main.cpp:14:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   14 |         freopen(task".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
Main.cpp:15:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   15 |         freopen(task".out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#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...