Submission #320125

#TimeUsernameProblemLanguageResultExecution timeMemory
320125AlexLuchianovLinear Garden (IOI08_linear_garden)C++14
100 / 100
287 ms3424 KiB
#include <iostream> #include <vector> #include <cassert> #include <cmath> using ll = long long; #define MIN(a, b) (((a) < (b)) ? (a) : (b)) #define MAX(a, b) (((a) < (b)) ? (b) : (a)) int const nmax = 1000000; int dp[3][3][5][2]; int dp2[3][3][5][2]; int main() { int n, modulo; std::cin >> n >> modulo; std::string s; std::cin >> s; s = "#" + s; int result = 0; dp[0][0][2][0] = 1; for(int i = 1;i <= n; i++) { int val = 0; if(s[i] == 'P') val = 1; for(int smin = 0; smin <= 2; smin++) for(int smax = 0; smax <= 2 - smin; smax++) for(int curr = 2 - smin; curr <= 2 + smax; curr++) for(int h = 0; h < 2; h++) { for(int h2 = 0; h2 < 2 && (h == 1 || h2 <= val); h2++) { int smax2 = smax; int smin2 = smin; int curr2 = curr + h2 * 2 - 1; smin2 = std::max(smin2, -(curr2 - 2)); smax2 = std::max(smax2, curr2 - 2); if(smin2 + smax2 <= 2) { dp2[smin2][smax2][curr2][h | (h2 < val)] += dp[smin][smax][curr][h]; if(modulo <= dp2[smin2][smax2][curr2][h | (h2 < val)]) dp2[smin2][smax2][curr2][h | (h2 < val)] -= modulo; } } } for(int smin = 0; smin <= 2; smin++) for(int smax = 0; smax <= 2 - smin; smax++) for(int curr = 2 - smin; curr <= 2 + smax; curr++) { for(int h = 0; h < 2; h++) { dp[smin][smax][curr][h] = dp2[smin][smax][curr][h]; dp2[smin][smax][curr][h] = 0; if(i == n && h == 1) { result += dp[smin][smax][curr][h]; if(modulo <= result) result -= modulo; } } } } std::cout << (result + 1) % modulo; 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...