Submission #857971

#TimeUsernameProblemLanguageResultExecution timeMemory
857971TAhmed33Linear Garden (IOI08_linear_garden)C++98
100 / 100
106 ms29252 KiB
#include <bits/stdc++.h> using namespace std; int m; int add (int a, int b) { a += b; if (a >= m) a -= m; return a; } int sub (int a, int b) { a -= b; if (a < 0) a += m; return a; } int mul (int a, int b) { return (a * 1ll * b) % m; } int dp[2][5][5][5]; string s; inline int get (int a, int b, int c, int d) { if (d < 0 || d > 4) return 0; if (b < 0 || b > 4) return 0; if (c < 0 || c > 4) return 0; return dp[a & 1][b][c][d]; } int main () { int n; cin >> n >> m; cin >> s; vector <vector <int>> x; int a = 2, b = 2, c = 2; int sum = 1; for (int i = 0; i < n; i++) { if (s[i] == 'P') { x.push_back({(int)s.length() - i - 1, min(c + 1, a), max(c + 1, b), c + 1}); c--; a = min(a, c); b = max(b, c); } else { c++; a = min(c, a); b = max(b, c); } } for (int j = 0; j <= 2; j++) for (int k = 2; k <= min(4, j + 2); k++) for (int l = j; l <= k; l++) dp[0][j][k][l] = 1; for (int i = 0; i <= n; i++) { if (i) for (int j = 0; j <= 2; j++) { //low for (int k = 2; k <= min(4, j + 2); k++) { //high for (int l = j; l <= k; l++) { int &ret = dp[i & 1][j][k][l]; ret = 0; ret = add(ret, get(i - 1, min(j, l - 1), max(k, l - 1), l - 1)); ret = add(ret, get(i - 1, min(j, l + 1), max(k, l + 1), l + 1)); } } } if (!x.empty() && x.back()[0] == i) { sum = add(sum, get(i, x.back()[1], x.back()[2], x.back()[3])); x.pop_back(); } } cout << sum << '\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...
#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...