제출 #1338009

#제출 시각아이디문제언어결과실행 시간메모리
1338009AhmadAlhussainLinear Garden (IOI08_linear_garden)C++20
85 / 100
159 ms131072 KiB
#include<bits/stdc++.h>
using namespace std;
const int N = 1000005;
int n,m;
int dp[N][6];
int cnt=1;
char s[N];
map<pair<char,char>,int>mp;
int rec(int st,short x,short y) {
    if(dp[st][mp[{-x,y}]]!=0) {
        return dp[st][mp[{-x,y}]];
    }
    if(st==n) {
        return dp[st][mp[{-x,y}]]=1;
    }
    if(x>-2) {
        dp[st][mp[{-x,y}]]+=rec(st+1,x-1,max(y-1,0));
    }
    if(y<2) {
        dp[st][mp[{-x,y}]]+=rec(st+1,min(x+1,0),y+1);
    }
    return dp[st][mp[{-x,y}]]%=m;
}
void rec1(int st,short x,short y) {
    if(st==n)return;
    if(s[st]=='P') {
        cnt+=dp[st+1][mp[{-(x-1),max(y-1,0)}]];
        cnt%=m;
        rec1(st+1,min(x+1,0),y+1);
    }
    else {
        rec1(st+1,x-1,max(y-1,0));
    }
}
signed main() {
    cin.tie(0)->sync_with_stdio(0);
    cin >> n>>m>>s;
    mp[{0,0}]=0,mp[{0,1}]=1,mp[{1,0}]=2,mp[{1,1}]=3,mp[{2,0}]=4,mp[{0,2}]=5;
    rec(0,0,0);
    rec1(0,0,0);
    cout<<cnt<<'\n';

}
#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...