Submission #1276792

#TimeUsernameProblemLanguageResultExecution timeMemory
1276792huyngodzzTrains (BOI24_trains)C++20
100 / 100
332 ms126412 KiB
#include<bits/stdc++.h> using namespace std; #define FOR(i ,a ,b) for(int i = a; i <= b; i++) const int maxN = 1e5 + 999; const int mod = 1e9 + 7; int n , d[maxN] , x[maxN]; namespace sub1{ long long dp[maxN]; bool check(){ return (n <= 5000); } void solve(){ dp[1] = 1; FOR(i, 1, n){ if(d[i] == 0)continue; FOR(j ,1 , x[i]){ long long nxt = i + 1LL * j * d[i]; if(nxt > n)break; dp[nxt] = (dp[nxt] + dp[i])%mod; } } long long ans = 0; FOR(i, 1, n){ ans = (ans + dp[i])%mod; } cout << ans; } } namespace ac{ int B; void Fixmod(int & x){ if(x >= mod) x-=mod; if(x < 0)x += mod; } int dp[maxN]; int cnt[320][maxN]; void solve(){ B = sqrt(n); dp[1] = 1; FOR(i, 1, n){ FOR(j, 1 , B){ if(i - j < 1)break; cnt[j][i] = (cnt[j][i] + cnt[j][i - j])%mod; Fixmod(cnt[j][i]); dp[i] = (dp[i] + cnt[j][i])%mod; Fixmod(dp[i]); } ///update if(d[i] > B){ FOR(j ,1 , x[i]){ long long nxt = i + 1LL * j * d[i]; if(nxt > n)break; dp[nxt] = (dp[nxt] + dp[i])%mod; } }else{ if(d[i] == 0)continue; cnt[d[i]][i] = (cnt[d[i]][i] + dp[i])%mod; Fixmod(cnt[d[i]][i]); long long kk = (i + 1LL* (x[i] + 1)* d[i]); if(kk <= n){ cnt[d[i]][kk] = (cnt[d[i]][kk] - dp[i]); Fixmod(cnt[d[i]][kk]); } } } int ans =0 ; FOR(i, 1, n){ ans = (ans + dp[i])%mod; Fixmod(ans); } cout << ans; // cerr << ans << '\n'; } } void solve(){ cin >> n ; FOR(i, 1 , n){ cin >> d[i] >> x[i]; } // cout << sqrt(1e5); if(sub1::check())return sub1::solve(); return ac::solve(); } const string NAME = "task"; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); // freopen("train.inp", "r" ,stdin); // freopen("train.out", "w" ,stdout); // freopen(NAME +"out", "w" , stdout); solve(); }
#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...