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 = 2e5 + 7 ;
long long n , mod , ans ;
string s ;
int mv2[2] = {0 , 1} , mv1[2] = {1 , 0} ;
long long add (long long a , long long b){
return (a%mod + b%mod + mod) %mod ;
}
int dp[N][3][3][3][3];
void normalize(int &a , int &b , int &A , int &B){
int mn = min(a , b) ;
a-=mn ;
b-=mn;
A = max( A , a - b );
B = max(B , b - a);
}
int solve(int i , short a , short b , short A , short B){
if(dp[i][a][b][A][B]!=-1)
return dp[i][a][b][A][B] ;
if( a + B > 2 || b + A > 2 ) return 0 ;
if(i==n){
return 1 ;
}
long long ret = 0 ;
for(int j = 0 ; j< 2 ;j++){
int na = a + mv1[j] ;
int nb = b + mv2[j] ;
int tmpA = A;
int tmpB = B;
normalize(na , nb , tmpA , tmpB) ;
ret= add(ret , solve(i+1 , na , nb , tmpA , tmpB)) ;
}
return dp[i][a][b][A][B] = ret ;
}
int main(){
memset(dp , -1 , sizeof dp) ;
ios_base::sync_with_stdio(0) ;
cin.tie(0) ;
//freopen("in.in" , "r" , stdin) ;
cin>>n>>mod ;
cin>> s ;
int a = 0, b =0;
int A = 0, B = 0;
for(int i = 0 ;i < n;i++){
if(s[i] == 'L'){
b++ ;
normalize(a , b , A , B) ;
}else{
int tmpa = a ;
int tmpb = b ;
int tmpA = A ;
int tmpB = B ;
tmpb++ ;
normalize(tmpa , tmpb , tmpA , tmpB) ;
ans+=solve(i+1 , tmpa , tmpb , tmpA , tmpB) ;
a++;
normalize(a , b , A , B) ;
}
}
cout<<add(ans , 1);
return 0 ;
}
# | 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... |