Submission #995839

#TimeUsernameProblemLanguageResultExecution timeMemory
995839biankLinear Garden (IOI08_linear_garden)C++14
100 / 100
320 ms1528 KiB
#include <bits/stdc++.h> using namespace std; int prevDP[5][3][3][2], currDP[5][3][3][2]; inline int getVal(int curr, int mini, int maxi, bool tight) { if (curr < 0 || curr >= 5) return 0; if (maxi - mini >= 3) return 0; return prevDP[curr][curr - mini][maxi - mini][tight]; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m; string g; cin >> n >> m >> g; #define FORALLSTATES for (int curr = 0; curr < 5; curr++) \ for (int mini = curr; curr - mini < 3; mini--) \ for (int maxi = curr; maxi - mini < 3; maxi++) \ for (bool tight : {false, true}) FORALLSTATES { prevDP[curr][curr - mini][maxi - mini][tight] = 1; } for (int pos = n - 1; pos >= 0; pos--) { FORALLSTATES { int &res = currDP[curr][curr - mini][maxi - mini][tight]; res = getVal(curr + 1, mini, max(maxi, curr + 1), tight && g[pos] == 'L'); if (!tight || g[pos] == 'P') { res += getVal(curr - 1, min(mini, curr - 1), maxi, tight && g[pos] == 'P'); if (res >= m) res -= m; } } FORALLSTATES { prevDP[curr][curr - mini][maxi - mini][tight] = currDP[curr][curr - mini][maxi - mini][tight]; currDP[curr][curr - mini][maxi - mini][tight] = 0; } } cout << prevDP[2][0][0][1] << '\n'; 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...