제출 #1149134

#제출 시각아이디문제언어결과실행 시간메모리
1149134boboTrains (BOI24_trains)C++20
16 / 100
1963 ms265488 KiB
#include <bits/stdc++.h> using namespace std; #ifdef LOCAL #include "debug.h" #else #define debug(...) 42 #endif #define int long long #define all(x) x.begin(), x.end() const int mod = 1000000007; const int S = 330; const int N = 1e5 + 5; int n, d[N], x[N], dp[N], de[N], ans = 0; vector<int> rm[N]; int lz[N][S]; int32_t main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n; for (int i = 1; i <= n; i++) { cin >> d[i] >> x[i]; if (d[i] == 0 || d[i] > n) continue; int dest = i; for (int j = i; j <= min(n, i + x[i] * d[i]); j += d[i]) dest = j; rm[dest].push_back(i); de[i] = dest; } dp[1] = 1; for (int i = 1; i <= n; i++) { for (int j = 1; j < S; j++) dp[i] = (dp[i] + lz[i][j]) % mod; for (int train : rm[i]) if (x[train] > 0 && 1 <= d[train] && d[train] < S) lz[i][d[train]] = (lz[i][d[train]] - dp[train] + mod) % mod; if (d[i] > 0 && x[i] > 0) lz[i][d[i]] = (lz[i][d[i]] + dp[i]) % mod; for (int j = 0; j < S; j++) if (i + j <= n) lz[i + j][j] = (lz[i + j][j] + lz[i][j]) % mod; if (d[i] >= S) for (int j = i + d[i]; j <= de[i]; j += d[i]) dp[j] = (dp[j] + dp[i]) % mod; ans = (ans + dp[i]) % mod; } 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...