답안 #961005

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
961005 2024-04-11T11:24:22 Z hirayuu_oj Linear Garden (IOI08_linear_garden) C++17
100 / 100
241 ms 2296 KB
#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0; i<(n); i++)
#define all(x) x.begin(),x.end()
using ll=long long;
const ll INF=1LL<<60;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int N,M;
    cin>>N>>M;
    string S;
    cin>>S;
    using table=array<array<array<int,2>,5>,5>;
    table dp;
    rep(i,5){
        rep(j,5){
            dp[i][j][0]=0;
            dp[i][j][1]=0;
        }
    }
    dp[2][2][1]=1;
    rep(i,N){
        table ndp;
        rep(j,5){
            rep(k,5){
                ndp[j][k][0]=0;
                ndp[j][k][1]=0;
            }
        }
        rep(j,5){
            rep(k,5){
                dp[j][k][0]%=M;
                dp[j][k][1]%=M;
                if(k+1<5){
                    ndp[min(j+1,2)][k+1][0]+=dp[j][k][0];
                    if(S[i]=='P'){
                        ndp[min(j+1,2)][k+1][0]+=dp[j][k][1];
                    }
                    else{
                        ndp[min(j+1,2)][k+1][1]+=dp[j][k][1];
                    }
                }
                if(j-1>=0){
                    ndp[j-1][max(2,k-1)][0]+=dp[j][k][0];
                    if(S[i]=='P'){
                        ndp[j-1][max(2,k-1)][1]+=dp[j][k][1];
                    }
                }
            }
        }
        dp=move(ndp);
    }
    int ans=0;
    rep(i,5){
        rep(j,5){
            ans+=dp[i][j][0];
            ans+=dp[i][j][1];
            ans%=M;
        }
    }
    cout<<ans<<"\n";
}
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 452 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 1 ms 456 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Output is correct
2 Correct 1 ms 344 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 344 KB Output is correct
2 Correct 1 ms 600 KB Output is correct
3 Correct 2 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 600 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 16 ms 612 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 18 ms 716 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 74 ms 1256 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 97 ms 1260 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 120 ms 1516 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 149 ms 2032 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 236 ms 2292 KB Output is correct
2 Correct 241 ms 2296 KB Output is correct
3 Correct 235 ms 2296 KB Output is correct