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 <iostream>
#include <string>
using namespace std;
int N, M;
int pow2[1000001];
int main()
{
cin >> N >> M;
string S;
cin >> S;
pow2[0] = 1;
for(int i = 1; i <= 1e6; i++) pow2[i] = (2 * pow2[i-1]) % M;
int res = 0;
int last_block = -1; //left position of block
for(int i = 0; i < N; i++)
{
if(S[i] == 'L')
{
if(i > 0 && S[i] == S[i-1]) last_block = i-1;
continue;
}
int x = N-i;
int k = x/2;
if(last_block == -1)
{
if(x % 2)
{
if(i == 0) res = (res + pow2[k] + pow2[k] - 1) % M;
else if(S[i-1] == 'L')
{
res = (res + pow2[k]) % M;
}
else if(S[i-1] == 'P')
{
res = (res + pow2[k] + pow2[k] - 1) % M;
}
}
else
{
if(i == 0) res = (res + pow2[k] + pow2[k-1] - 1) % M;
else if(S[i-1] == 'L')
{
res = (res + pow2[k-1]) % M;
}
else if(S[i-1] == 'P')
{
res = (res + pow2[k] + pow2[k-1] - 1) % M;
}
}
}
else if(S[last_block] == 'L' && last_block % 2 == i % 2 && x % 2 == 0)
{
continue;
}
else if(S[last_block] == 'L' && last_block % 2 == i % 2 && x % 2 == 1)
{
continue;
}
else if(S[last_block] == 'L' && last_block % 2 != i % 2 && x % 2 == 0)
{
res = (res + pow2[k-1]) % M;
}
else if(S[last_block] == 'L' && last_block % 2 != i % 2 && x % 2 == 1)
{
res = (res + pow2[k]) % M;
}
else if(S[last_block] == 'P' && last_block % 2 == i % 2 && x % 2 == 0)
{
continue;
}
else if(S[last_block] == 'P' && last_block % 2 == i % 2 && x % 2 == 1)
{
continue;
}
else if(S[last_block] == 'P' && last_block % 2 != i % 2 && x % 2 == 0)
{
res = (res + pow2[k-1]) % M;
}
else /*if(S[last_block] == 'P' && last_block % 2 != i % 2 && x % 2 == 1)*/
{
res = (res + pow2[k]) % M;
}
if(i > 0 && S[i] == S[i-1]) last_block = i-1;
}
res = (res + 1) % M;
cout << res << '\n';
}
# | 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... |