This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6+5;
int n, mod, s, ans, pwr[N];
map<int,int> fix;
string a;
bool ok(){
if(abs(s) > 2) return 0;
if( fix[-2] && fix[1] + fix[2]) return 0;
if( fix[2] && fix[-1] ) return 0;
return 1;
}
int main() {
cin >> n >> mod;
cin >> a;
a = '$' + a;
pwr[0] = 1;
for(int i=1; i<=n; i++)
pwr[i] = pwr[i-1] * 2 % mod;
for(int i=1; i<=n; i++) {
if ( a[i] == 'P' ){
s -- ; fix[s] ++;
if ( ok() ) {
if ( fix[2] || fix[-2]) {
if ( abs(s) == 1) ans += pwr [ (n - i + 1)/2];
else ans += pwr [ (n - i)/2];
}
else {
if( fix[-1] && fix [1]){
if (!s) ans += pwr [ (n - i + 1)/2];
else ans +=pwr [ (n - i)/2];
}
else {
ans += (pwr [ (n - i + 1)/2] + pwr [ (n - i )/2] - 1 + mod) % mod;
}
}
ans %=mod;
}
fix[s] --;
s += 2;
}
else s --;
fix [s] ++;
}
cout << (ans + 1)%mod ;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |