제출 #1335521

#제출 시각아이디문제언어결과실행 시간메모리
1335521hmms127Linear Garden (IOI08_linear_garden)C++20
80 / 100
4 ms3104 KiB
#include "bits/stdc++.h"
using namespace std;
#define f1(n) for(int i=0;i<n;i++)
#define f3(n) for(int j=0;j<n;j++)
#define f2(m,n,q) for(int i=m;i<n;i++)
#define f4(m,n,q) for(int j=m;j<n;j++)
#define int long long
#define pb push_back
constexpr int N=2e5+5,LOG=21,mod=1e9+7,inf=1e15;
using pr=pair<int,int>;
using ar=array<int,3>;
int x[N],y[N],a[N],b[N];
signed main(){
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
    int tt=1;//cin>>tt;
    while(tt--){
        int n,m;cin>>n>>m;
        string s;cin>>s;
        int pw[N];pw[0]=1;f2(1,N,1)pw[i]=(pw[i-1]*2)%m;
        auto calc=[&](int x) {
            if (x<=0)return 0ll;
            return pw[x/2]-1;
        };
        int ans=1;char lst='H';
        f1(n) {
            if (s[i]=='P') {
                if (i>0&&s[i-1]=='L') {
                    if ((i>1&&s[i-2]=='L')||(lst=='L'))continue;
                    ans+=calc(n-i-1)+1;ans%=m;
                }
                else (lst=='L' ? ans=(ans+calc(n-i-1)+1)%m:ans=(ans+calc(n-i-1)+calc(n-i)+1)%m);
            }
            if (i>0&&s[i]==s[i-1])lst=s[i];
        }
        cout<<ans;



    }
}
#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...