Submission #399131

#TimeUsernameProblemLanguageResultExecution timeMemory
399131AugustinasJucasLinear Garden (IOI08_linear_garden)C++14
0 / 100
67 ms65540 KiB
#include <bits/stdc++.h>

using namespace std;
long long n, m;
const int dydis = 1e6;
long long dp[dydis][2][3][3] = {0};
string a;
long long f(int ind, bool jauTikraiMaz, int buvo, int paskutinisDvig){
    if(ind == n) return 1;
    if(dp[ind][jauTikraiMaz][buvo][paskutinisDvig] != -1) return  dp[ind][jauTikraiMaz][buvo][paskutinisDvig];

    /// jei desiu 1
    long long st = 0;
    if((a[ind] == '0' && jauTikraiMaz) || a[ind] == '1'){
        int bsJau = jauTikraiMaz;
        if(buvo != 1 + 1){
            // nebus du is eiles
            st = st + f(ind+1, bsJau, 1+1, paskutinisDvig); st %= m;
        }else{
            // bus du is eiles
            if(paskutinisDvig != 1+1){
                // jei pries tai nedejau dvigubu vienetu
                st = st + f(ind+1, bsJau, 1+1, 1+1); st %= m;
            }
        }
    }
    /// jei desiu 0
    int bsJau = jauTikraiMaz || (a[ind] == '1');
    if(buvo != 0 + 1){
        // nebus du is eiles
        st = st + f(ind+1, bsJau, 0+1, paskutinisDvig); st %= m;
    }else{
        // bus du is eiles
        if(paskutinisDvig != 0+1){
            st = st + f(ind+1, bsJau, 0+1, 0+1); st %= m;
        }
    }
    return dp[ind][jauTikraiMaz][buvo][paskutinisDvig] = st;
}
int main() {
    ofstream out ("out.txt");
    cin >> n >> m >> a;
    for(auto &x : a) if(x == 'L') x = '0'; else x = '1';
    for(int i = 0; i < dydis; i++) for(int b = 0; b < 2; b++) for(int j = 0; j < 3; j++) for(int h = 0; h < 3; h++) dp[i][b][j][h] = -1;
    //cout << "Viso yra " << dp[1][0][0] + dp[1][0][1];
    cout << f(0, 0, 0, 0);
    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...