제출 #1370119

#제출 시각아이디문제언어결과실행 시간메모리
1370119magentorLinear Garden (IOI08_linear_garden)C++20
100 / 100
53 ms2416 KiB
#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (long long i = 0; i < (long long)(n); i++)
#define rep2(i, m ,n) for (int i = (m); i < (long long)(n); i++)
#define REP(i, n) for (long long i = 1; i < (long long)(n); i++)
typedef long long ll;
#define l(n) n.begin(),n.end()
#define YesNo(Q) Q==1?cout<<"Yes":cout<<"No"
long long modpow(long long a, long long n, long long mod) {
    long long res = 1;
    while (n > 0) {
        if (n & 1) res = res * a % mod;
        a = a * a % mod;
        n >>= 1;
    }
    return res;
}
int main(){
  ll n,m;cin>>n>>m;
  string s;cin>>s;
  //"L,P"
  ll ans = 0;
  int cnt = 0;
  int mn = 0;
  int mx = 0;
  rep(i,s.size()){
    int mn1 = min(mn,cnt-1);
    int mx1 = max(mx,cnt-1);
    int ncnt = cnt-1;
    if(-2<=mn1 && s[i]=='P'){
      
      for(int j = -1;1>=j;j++){
        if(mn1>=j-1&&j+1>=mx1){
          
          if(j==ncnt){
            //(s.size()-i)/2
            ans += modpow(2LL,(s.size()-i)/2,m);
            ans %= m; 
          }
          else{
            ans += modpow(2LL,(s.size()-i-1)/2,m);
            ans %= m; 
          }
        }
      }
      //cout<<mn1<<" "<<mx1<<endl;
      for(int j = 0;j<=1;j++){
        if(mn1>=j-1&&j>=mx1){
          ans--;
          ans %= m; 
        }
      }
    }
    
    if(s[i]=='P'){cnt++;mx = max(mx,cnt);}
    else{cnt--;mn=min(mn,cnt);}
  }
  ans = (ans+1)%m;
  cout << ans << endl;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…