Submission #754094

#TimeUsernameProblemLanguageResultExecution timeMemory
754094AndresRPerezLinear Garden (IOI08_linear_garden)C++17
0 / 100
53 ms65536 KiB
/******************************************************************************

                              Online C++ Compiler.
               Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.

*******************************************************************************/

#include <bits/stdc++.h>

using namespace std;

const int N = 1e6+1;
const int M = 5;

int n, m;
string s;

int mem [N][M][M][M];

int dp( int left, int lo, int hi, int curr ){
    if( left == 0 ) return 1;
    int &ret = mem[left][lo][hi][curr];
    if( ret != -1 ) return ret;
    
    ret = 0;

    for( int nxt = -1 ; nxt <= 1 ; nxt += 2 ){
        int newCurr = curr + nxt;
        int newLo = min( lo, newCurr );
        int newHi = max( hi, newCurr );
        if( newCurr < 0 or newCurr > 4 ) continue;
        if( newHi - newLo > 2 ) continue;
        ret += dp( left-1, newLo, newHi, newCurr );
        ret %= m;
    }
    return ret;
}

int main()
{   
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    
    memset(mem, -1, sizeof(mem));
    cin >> n >> m >> s ;
    
    int curr = 2, lo = 2, hi = 2;
    int ans = 0;
    for( int i = 0 ; i < n ; i ++ ){
        if( s[i] == 'P' ){
            int newCurr = curr-1;
            int newLo = min( lo, newCurr );
            int newHi = max( hi, newCurr );
            int add = dp( n-i-1, newLo, newHi, newCurr );
            //cout << "   -> add " << add << endl ;
            ans += add;
            ans %= m;
        }
        if( s[i] == 'L' ) curr --;
        else curr ++;
        lo = min( lo, curr );
        hi = max( hi, curr );
    }
    cout << ans+1 << endl ;

    return 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...