Submission #1111608

#TimeUsernameProblemLanguageResultExecution timeMemory
1111608justin271828Trains (BOI24_trains)C++14
37 / 100
2072 ms3536 KiB
#include <bits/stdc++.h> using namespace std; int main() { long long N; cin >> N; if (N == 1) { cout << 1; return 0; } long long d[N]; long long x[N]; for (long long i = 0; i < N; i++) { cin >> d[i] >> x[i]; } bool all = true; for (int i: d) if (i != 1) all = false; if (!all) { long long total[N]; memset(total, 0, sizeof(total)); total[0] = 1; for (long long i = 0; i < N; i++) { if (d[i] == 0) continue; for (long long j = 1; j <= x[i]; j++) { if (i+j*d[i] >= N) break; total[i+j*d[i]] += total[i]; total[i+j*d[i]] %= 1000000007; } } long long ans = 0; for (long long i: total) ans += i; ans %= 1000000007; cout << ans; return 0; } long long diff[N]; memset(diff, 0, sizeof(diff)); diff[0] = 1; diff[1] = -1; long long dsum = 0; for (int i = 0; i < N-1; i++) { dsum += diff[i]; if (dsum < 0) dsum += 1000000007; dsum %= 1000000007; diff[i+1] += dsum; if (diff[i+1] < 0) dsum += 1000000007; diff[i+1] %= 1000000007; if (i+1+x[i] < N) { diff[i+1+x[i]] -= dsum; if (diff[i+1+x[i]] < 0) dsum += 1000000007; diff[i+1+x[i]]%=1000000007; } } long long sum[N]; sum[0] = 1; for (int i = 1; i < N; i++) { sum[i] = sum[i-1]+diff[i]; if (sum[i] < 0) sum[i] += 1000000007; sum[i]%=1000000007; } long long ans = 0; for (long long i: sum) { ans += i; ans %= 1000000007; } cout << ans; return 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...