제출 #1339265

#제출 시각아이디문제언어결과실행 시간메모리
1339265North1304Linear Garden (IOI08_linear_garden)C++20
100 / 100
65 ms36760 KiB
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 1;
int dp[N][3][3];
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);
    int n,mod;
    string s;
    cin >> n >> mod >> s;
    for (int i=0;i<=2;i++) {
        for (int j=0;j<=2;j++) {
            if (i+j<=2) dp[0][i][j] = 1;
        }
    }
    for (int i=1;i<=n;i++) {
        for (int j=0;j<=2;j++) {
            for (int k=0;k<=2;k++) {
                if (j+k>2) continue;
                if (j<2) {
                    dp[i][j][k] += dp[i-1][j+1][max(0,k-1)];
                    dp[i][j][k] %= mod;
                }
                if (k<2) {
                    dp[i][j][k] += dp[i-1][max(0,j-1)][k+1];
                    dp[i][j][k] %= mod;
                }
            }
        }
    }
    int ans = 1;
    int x = 0 , y = 0;
    for (int i=0;i<n;i++) {
        if (s[i]=='P') {
            if (x<2) {
                ans += dp[n-i-1][x+1][max(0,y-1)];
                ans %= mod;
            }
            if (x) x--;
            y++;
        }
        else {
            x++;
            if (y) y--;
        }
    }
    cout << ans;
    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...