Submission #219703

#TimeUsernameProblemLanguageResultExecution timeMemory
219703mohamedsobhi777Linear Garden (IOI08_linear_garden)C++14
2 / 100
1599 ms65540 KiB
#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 ; 
                }
            }
        }
        ans = add(ans , ok) ; 
        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) ; 
            solve(i+1 , s.substr(0 , i+1) ) ; 
        }
    }
    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:66:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
#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...