Submission #219716

#TimeUsernameProblemLanguageResultExecution timeMemory
219716mohamedsobhi777Linear Garden (IOI08_linear_garden)C++14
0 / 100
54 ms65540 KiB
#include <bits/stdc++.h> 

using namespace std ; 
const int N = 1e6 + 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];

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 solve(int i , int ab , int A , int B){
    int a = max(0 , ab-2) ; 
    int b = max(0 , 2-ab) ; 
    if(dp[i][ab][A][B]!=-1)
        return dp[i][ab][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; 
        int nab = na - nb + 2 ;
        if(nab <0 || nab > 4)continue ; 
        normalize(na , nb , tmpA , tmpB) ; 
        ret= add(ret , solve(i+1 , nab , tmpA , tmpB)) ; 
    }
    return dp[i][ab][A][B] = ret ; 
}

int main(){
    memset(dp , -1 , sizeof dp) ; 
    ios_base::sync_with_stdio(0) ; 
    cin.tie(0) ; 
    cin>>n>>mod ; 
    cin>> s ; 
    int a = 0, b =0; 
    int A = 0, B = 0; 
    int ab = 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++ ; 
            int nab = tmpa - tmpb +2 ; 
            if(nab>=0 && nab<=4){
                normalize(tmpa , tmpb , tmpA , tmpB) ;
                ans+=solve(i+1 , nab , tmpA , tmpB) ;                 
            }
            a++; 
            normalize(a , b , A , B) ;             
        }
    }
    cout<<add(ans , 1); 
    return 0 ; 
}

Compilation message (stderr)

linear_garden.cpp: In function 'int main()':
linear_garden.cpp:55:9: warning: unused variable 'ab' [-Wunused-variable]
     int ab = 0 ; 
         ^~
#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...