Submission #1036619

#TimeUsernameProblemLanguageResultExecution timeMemory
1036619VMaksimoski008Linear Garden (IOI08_linear_garden)C++17
100 / 100
339 ms11588 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; ll n, mod, ans = 0; vector<ll> vec; string s; ll dp[2][5][5][5][2]; int main() { cin >> n >> mod >> s; vec.push_back(0); for(int i=0; i<n; i++) { if(s[i] == 'L') vec.push_back(-1); else vec.push_back(1); } dp[0][2][2][2][0] = 1; for(int pos=0; pos<n; pos++) { for(int mn=0; mn<=4; mn++) { for(int mx=mn; mx<=min(4, mn+2); mx++) { for(int curr=mn; curr<=mx; curr++) { for(int under=0; under<2; under++) { for(int i=-1; i<=1; i++) { if(i == 0) continue; if(!under && i > vec[pos+1]) continue; int nmn = min(mn, curr + i); int nmx = max(mx, curr + i); int nu = under | (i < vec[pos+1]); if(nmx - nmn > 2 || nmn < 0 || nmx > 4) continue; dp[1][nmn][nmx][curr+i][nu] = (dp[0][mn][mx][curr][under] + dp[1][nmn][nmx][curr+i][nu]) % mod; } } } } } for(int mn=0; mn<=4; mn++) { for(int mx=mn; mx<=4; mx++) { for(int curr=mn; curr<=mx; curr++) { for(int under=0; under<2; under++) { dp[0][mn][mx][curr][under] = dp[1][mn][mx][curr][under]; dp[1][mn][mx][curr][under] = 0; } } } } } ll ans = 0; for(int mn=0; mn<=4; mn++) for(int mx=mn; mx<=min(4, mn+2); mx++) for(int curr=mn; curr<=mx; curr++) ans = (ans + dp[0][mn][mx][curr][1]) % mod; cout << (ans + 1) % mod << '\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...