제출 #1338004

#제출 시각아이디문제언어결과실행 시간메모리
1338004AhmadAlhussainLinear Garden (IOI08_linear_garden)C++20
90 / 100
153 ms123688 KiB
#include<bits/stdc++.h>
using namespace std;
const int N = 1000005;
int n,m;
int dp[N][3][3];
bool vis[N][3][3];
int cnt=1;
char s[N];
int rec(int st,short x,short y) {
    if(vis[st][-x][y]) {
        vis[st][-x][y]=true;
        return dp[st][-x][y];
    }
    if(st==n) {
        return dp[st][-x][y]=1;
    }
    vis[st][-x][y]=true;
    if(x>-2) {
        dp[st][-x][y]+=rec(st+1,x-1,max(y-1,0));
    }
    if(y<2) {
        dp[st][-x][y]+=rec(st+1,min(x+1,0),y+1);
    }
    return dp[st][-x][y]%=m;
}
void rec1(int st,short x,short y) {
    if(st==n)return;
    if(s[st]=='P') {
        cnt+=dp[st+1][-(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;
    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...