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 = 1e4 + 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 ;
}
long long 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) ;
}
long long solve2(int i , int a , int b , int A , int 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) ;
char c ;
if(!j) c='0' ;
else c = '1' ;
ret= add(ret , solve2(i+1 , na , nb , tmpA , tmpB)) ;
}
return dp[i][a][b][A][B] = ret ;
}
int solve(int i , string ss ){
if(i==n){
bool ok = 1 ;
for(int j = 0 ; j < n ;j ++){
int L = 0 , P = 0;
for(int k = j ; k < n;k++){
if(ss[k]=='L')L++ ;
else P++ ;
if(abs(L - P) > 2){
ok = 0 ;
}
}
}
if(ok){
// cout<<ss<<".\n" ;
}
ans = add(ans , ok) ;
// ans+=solve2(i+1 , a , b , A , B) ;
return 0 ;
}
else{
solve(i+1 , ss + "L") ;
solve(i+1 , ss+ "P") ;
}
}
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{
a++;
normalize(a , b , A , B) ;
// ans+=solve2(i+1 , a , b , A , B) ;
// cout<<i<<" " << a<<" " << b<<".\n" ;
solve(i+1 , s.substr(0 , i) + 'L' ) ;
// cout<<"................\n" ;
}
}
cout<<add(ans , 1);
return 0 ;
}
Compilation message (stderr)
linear_garden.cpp: In function 'long long int solve2(int, int, int, int, int)':
linear_garden.cpp:38:14: warning: variable 'c' set but not used [-Wunused-but-set-variable]
char c ;
^
linear_garden.cpp: In function 'int solve(int, std::__cxx11::string)':
linear_garden.cpp:70:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
# | 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... |