제출 #1336201

#제출 시각아이디문제언어결과실행 시간메모리
1336201eyadoozLinear Garden (IOI08_linear_garden)C++20
100 / 100
72 ms64152 KiB
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;

#define pb push_back
#define all(x) (x).begin(), (x).end()
#define sz(x) (int) (x).size()
#define endl '\n'

int main()
{
    cin.tie(0) -> sync_with_stdio(0);

    int n, m;
    cin >> n >> m;
    string a;
    cin >> a;
    int dp[n+5][4][4];
    memset(dp, 0, sizeof(dp));
    for(int i=0;i<3;i++) 
        for(int j=0;j<=i;j++) dp[n][j][i]=1;

    for(int i=n-1;i>=1;i--) 
    {
        for(int j=0;j<3;j++) 
        {
            for(int d=0;d<3;d++) 
            {
                for(int k=0;k<2;k++) 
                {
                    int dif=(k==0?-1:1);
                    int cur=j+dif, nd=d;
                    if(cur>d) nd++;
                    else if(cur<0) {cur=0;nd++;}
                    if(nd>2) continue;
                    dp[i][j][d]+=dp[i+1][cur][nd];
                    dp[i][j][d]%=m;
                }
            }
        }
    }

    int pos=1, cur=0, s=0;
    for(int i=1;i<=n;i++) 
    {
        if(a[i-1]=='P') 
        {
            int ncur=cur+1, ns=s;
            if(ncur>ns) ns++;
            else if(ncur<0) ncur=0, ns++;
            pos+=dp[i][ncur][ns];
            pos%=m;
        }
        int dif=(a[i-1]=='L'?1:-1);
        cur+=dif;
        if(cur>s) s++;
        else if(cur<0) cur=0, s++;
    }
    cout << pos%m;
}
    
#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...