Submission #1280578

#TimeUsernameProblemLanguageResultExecution timeMemory
1280578khoavn2008Linear Garden (IOI08_linear_garden)C++20
100 / 100
313 ms2272 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define ld double #define FOR(i,l,r) for(ll i = (l), _r = (r); i <= _r; i++) #define FORNG(i,r,l) for(ll i = (r), _l = (l); i >= _l; i--) #define REP(i,r) for(ll i = 0, _r = (r); i < _r; i++) #define endl '\n' #define fi first #define se second #define pb push_back #define size(v) ((ll)(v).size()) #define all(v) (v).begin(),(v).end() #define MASK(x) (1LL << (x)) #define BIT(x,i) (((x) >> (i)) & 1) const ll N = 1e5 + 10, INF = 1e9, LOG = 21; ll n,MOD; string s; void add(ll &a,ll b){ a += b; if(a >= MOD) a %= MOD; } ll dp[2][MASK(5)][5][2]; bool check(ll mask,ll k){ if(abs(k) >= 3)return 0; if(k + 3 <= 2 && BIT(mask, k + 3 + 2))return 0; if(k - 3 >= -2 && BIT(mask, k - 3 + 2))return 0; return 1; } int main(){ // freopen(".INP", "r", stdin); // freopen(".OUT", "r", stdout); ios_base::sync_with_stdio(0);cin.tie(0); cin>>n>>MOD>>s; s = " " + s; dp[0][0][2][0]++; ll ans = 0; FOR(i,0,n){ REP(mask,MASK(5))FOR(k,-2,2)REP(low,2)if(dp[0][mask][k + 2][low]){ // cout<<i<<' '<<bitset<5>(mask)<<' '<<k<<' '<<low<<endl; if(i == n){ add(ans, dp[0][mask][k + 2][low]); continue; } ll lim = low ? 1 : (s[i + 1] == 'L' ? 0 : 1); FOR(c,0,lim){ ll nmask = mask | MASK(k + 2); ll nk = k + (c == 0 ? +1 : -1); if(!check(nmask, nk))continue; bool nlow = low || c != lim; add(dp[1][nmask][nk + 2][nlow], dp[0][mask][k + 2][low]); } dp[0][mask][k + 2][low] = 0; } swap(dp[0], dp[1]); } cout<<ans; } /* 12 10000 LPLLPLPPLPLL */
#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...