Submission #1338002

#TimeUsernameProblemLanguageResultExecution timeMemory
1338002AhmadAlhussainLinear Garden (IOI08_linear_garden)C++20
90 / 100
143 ms123712 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;
string s;
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...