Submission #998985

#TimeUsernameProblemLanguageResultExecution timeMemory
998985huutuanLinear Garden (IOI08_linear_garden)C++14
40 / 100
1579 ms65536 KiB
#include<bits/stdc++.h>

using namespace std;

const int N=1e6+10;
int n, m;
int f[N][3][3];

int dp(int i, int minpf, int maxpf){
   if (minpf<-2 || maxpf>2) return 0;
   if (i==n+1) return 1%m;
   if (f[i][-minpf][maxpf]!=-1) return f[i][-minpf][maxpf];
   int res=0;
   res=(res+dp(i+1, min({0, minpf-1, -1}), max({0, maxpf-1, -1})))%m;
   res=(res+dp(i+1, min({0, minpf+1, +1}), max({0, maxpf+1, +1})))%m;
   return res;
}

int32_t main(){
   ios_base::sync_with_stdio(false);
   cin.tie(nullptr);
   memset(f, -1, sizeof f);
   cin >> n >> m;
   string s; cin >> s;
   int ans=0, minpf=0, maxpf=0;
   for (int i=1; i<=n; ++i){
      if (s[i-1]=='P'){
         ans=(ans+dp(i+1, min({0, minpf-1, -1}), max({0, maxpf-1, -1})))%m;
         minpf=min({0, minpf+1, +1}), maxpf=max({0, maxpf+1, +1});
      }else{
         minpf=min({0, minpf-1, -1}), maxpf=max({0, maxpf-1, -1});
      }
   }
   cout << (ans+1)%m << '\n';
   return 0;
}
#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...