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