제출 #1278315

#제출 시각아이디문제언어결과실행 시간메모리
1278315ducksaysquackTrains (BOI24_trains)C++20
34 / 100
190 ms5136 KiB
#include <bits/stdc++.h> #define int long long #define f first #define s second using namespace std; const int M = 1e9+7; signed main() { int n; cin >> n; vector<int> dp(n); vector<vector<int>> c(320,vector<int>(320)); dp[0] = 1; priority_queue<pair<int,pair<int,int>>> p; for(int i=0;i<n;i++) { int a, b; cin >> a >> b; for(int j=1;j*j<=n;j++) dp[i] += c[j][i%j], dp[i] %= M; if(a == 0) continue; if(a*a <= n) {c[a][i%a] += dp[i], c[a][i%a] %= M; p.push({i+a*b,{a,dp[i]}});} else for(int j=i+a;j<min(i+a*b+1,n);j+=a) dp[j] += dp[i], dp[j] %= M; while(!p.empty() && p.top().f == i) {c[p.top().s.f][i%p.top().s.f] += M-p.top().s.s, c[p.top().s.f][i%p.top().s.f] %= M; p.pop();} } int ans = 0; for(int i=0;i<n;i++) ans += dp[i]; cout << ans%M << '\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...