Submission #109455

#TimeUsernameProblemLanguageResultExecution timeMemory
109455MetBLinear Garden (IOI08_linear_garden)C++14
100 / 100
330 ms62172 KiB
#include <iostream> #include <cstdlib> #include <string> #include <set> #include <map> #include <algorithm> #include <bitset> #include <queue> #include <math.h> #include <stack> #include <vector> #include <string.h> #include <random> typedef long long ll; const ll MOD = 1e9 + 7, INF = 1e18; using namespace std; string s; int n, d[1000000][3][5], dn[2][5][5][5], m; void add_self (int& a, int b) { a += b; if (a >= m) a -= m; } int main () { cin >> n >> m; dn[0][2][3][3] = 1; for (int i = 0; i < n; i++) { for (int j = 0; j < 3; j++) for (int k = j; k < min (5, j + 3); k++) for (int f = j; f <= k; f++) { if (max (k, f + 1) - j <= 2) add_self (dn[1][j][max (k, f + 1)][f + 1], dn[0][j][k][f]); if (k - min (j, f - 1) <= 2) add_self (dn[1][min (j, f - 1)][k][f - 1], dn[0][j][k][f]); add_self (d[i][j][k], dn[0][j][k][f]); } for (int j = 0; j < 3; j++) for (int k = j; k < min (5, j + 3); k++) for (int f = j; f <= k; f++) { dn[0][j][k][f] = dn[1][j][k][f]; dn[1][j][k][f] = 0; } } cin >> s; int max_balance = 2, min_balance = 2, balance = 2, ans = 0; for (int i = 0; i < n; i++) { if (s[i] == 'P') { for (int j = 0; j < 3; j++) for (int k = j; k < min (5, j + 3); k++) if (max (max_balance, k + balance - 2) - min (min_balance, j + balance - 2) <= 2) { add_self (ans, d[n - i - 1][j][k]); } balance--; } else balance++; max_balance = max (max_balance, balance); min_balance = min (min_balance, balance); } cout << (ans + 1) % m; }
#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...