Submission #217824

#TimeUsernameProblemLanguageResultExecution timeMemory
217824tatyamLinear Garden (IOI08_linear_garden)C++17
100 / 100
591 ms1556 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define name3(a,b,c,d,...) d #define rep1(a) for(ll i = 0; i < a; i++) #define rep2(i,a) for(ll i = 0; i < a; i++) #define rep(...) name3(__VA_ARGS__, rep3, rep2, rep1)(__VA_ARGS__) #define each(i,a) for(auto&& i : a) ll m; struct Modint{ ll x = 0; Modint(){} Modint(ll a): x(a % m){} Modint operator+(Modint a) const { return Modint(*this) += a; } Modint& operator+=(Modint a){ x += a.x; if(x >= m) x -= m; return *this; } }; int main(){ cin.tie(nullptr); ios::sync_with_stdio(false); ll n; string s; cin >> n >> m >> s; Modint dp1[5][5][5] = {}, dp2[5][5][5] = {}; dp2[2][2][2] = 1; bool flag = 1; each(c, s){ rep(5) rep(j, 5) if(j - i < 3) rep(k, 5) if((k ^ flag) & 1 && dp1[i][j][k].x){ if(k < 4) dp1[i][max(j, k + 1)][k + 1] += dp1[i][j][k]; if(k) dp1[min(i, k - 1)][j][k - 1] += dp1[i][j][k]; dp1[i][j][k] = 0; } rep(5) rep(j, 5) if(j - i < 3) rep(k, 5) if((k ^ flag) & 1 && dp2[i][j][k].x){ if(k < 4 && c == 'P') dp2[i][max(j, k + 1)][k + 1] += dp2[i][j][k]; if(k && c == 'P') dp1[min(i, k - 1)][j][k - 1] += dp2[i][j][k]; if(k && c == 'L') dp2[min(i, k - 1)][j][k - 1] += dp2[i][j][k]; dp2[i][j][k] = 0; } flag = !flag; } Modint ans = 0; rep(5) rep(j, 5) if(j - i < 3) rep(k, 5) ans += dp1[i][j][k]; ans += 1; cout << ans.x << endl; }
#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...