Submission #399145

#TimeUsernameProblemLanguageResultExecution timeMemory
399145AugustinasJucasLinear Garden (IOI08_linear_garden)C++14
100 / 100
431 ms3324 KiB
#include <bits/stdc++.h> using namespace std; long long n, m; const int dydis = 9e5 + 1 ; int dp[4][2][3][3] = {0}; string a; int f(int ind, bool jauTikraiMaz, int buvo, int paskutinisDvig){ if(ind == n) return dp[ind&1][jauTikraiMaz][buvo][paskutinisDvig] = 1; if(dp[ind & 1][jauTikraiMaz][buvo][paskutinisDvig] != -1) return dp[ind & 1][jauTikraiMaz][buvo][paskutinisDvig]; /// jei desiu 1 int 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 & 1][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'; int i, j, h, b; for(i = 0; i < 3; i++) for(b = 0; b < 2; b++) for(j = 0; j < 3; j++) for(h = 0; h < 3; h++) dp[i][b][j][h] = -1; //cout << "Viso yra " << dp[1][0][0] + dp[1][0][1]; for(int i = n-1; i > -1; i--){ for(int b = 0; b < 2; b++){ for(int h = 0; h < 3; h++){ for(int l = 0; l < 3; l++){ dp[i&1][b][h][l] = -1; f(i, b, h, l); } } } } 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...