Submission #1287400

#TimeUsernameProblemLanguageResultExecution timeMemory
1287400IBoryLinear Garden (IOI08_linear_garden)C++20
100 / 100
41 ms36760 KiB
#include <bits/stdc++.h> using namespace std; const int MAX = 1000007; int dp[MAX][3][3]; int main() { ios::sync_with_stdio(0); cin.tie(0); int N, MOD; string S; cin >> N >> MOD >> S; for (int idx = N; idx >= 0; --idx) for (int r = 0; r <= 2; ++r) for (int c = 0; c <= r; ++c) { if (idx == N) { dp[idx][r][c] = 1; continue; } dp[idx][r][c] = 0; if (!(r == 2 && c == 2)) { int nr = max(r, c + 1); dp[idx][r][c] = (dp[idx][r][c] + dp[idx + 1][nr][c + 1]) % MOD; } if (!(r == 2 && c == 0)) { int nr = (c == 0 ? r + 1 : r), nc = (c == 0 ? c : c - 1); dp[idx][r][c] = (dp[idx][r][c] + dp[idx + 1][nr][nc]) % MOD; } } int ans = 1, r = 0, c = 0; for (int i = 0; i < N; ++i) { if (S[i] == 'P') { int nr = (c == 0 ? r + 1 : r); int nc = (c == 0 ? c : c - 1); if (nc <= nr && nr <= 2) ans = (ans + max(0, dp[i + 1][nr][nc])) % MOD; r = max(r, ++c); } else { if (c == 0) r++; else c--; } } 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...
#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...
#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...
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...