Submission #1004773

#TimeUsernameProblemLanguageResultExecution timeMemory
100477312345678Linear Garden (IOI08_linear_garden)C++17
95 / 100
12 ms25848 KiB
#include <bits/stdc++.h>

using namespace std;

#define ll long long

const int nx=1e6+5;

ll n, m, dp[3][nx], res, cnt, mx, mn;
string s;

int main()
{
    cin.tie(NULL)->sync_with_stdio(false);
    cin>>n>>m>>s;
    dp[0][0]=dp[1][0]=dp[2][0]=1;
    for (int i=1; i<=n; i++)
    {
        dp[0][i]=dp[1][i-1];
        dp[1][i]=(dp[0][i-1]+dp[2][i-1])%m;
        dp[2][i]=dp[1][i-1];
        //cout<<"count "<<i<<' '<<dp[0][i]+dp[1][i]+dp[2][i]-2<<'\n';
    }
    for (int i=0; i<n; i++)
    {
        if (s[i]=='P')
        {
            ll tmp=cnt;
            tmp++;
            ll nmx=max(mx,tmp), nmn=mn, t=0;
            if (nmx-nmn<=2)
            {
                if (max(tmp+1, nmx)-min(tmp-1, nmn)<=2) res=(res+dp[1][n-i-1])%m, t++;
                if (tmp==nmx) res=(res+dp[2][n-i-1])%m, t++;
            }
            if (t==2) res--;
        }
        if (s[i]=='P') cnt--;
        else cnt++;
        mx=max(mx, cnt);
        mn=min(mn, cnt);
    }
    cout<<res+1;
}
#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...