Submission #754097

#TimeUsernameProblemLanguageResultExecution timeMemory
754097AndresRPerezLinear Garden (IOI08_linear_garden)C++17
63 / 100
71 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 = 3; int n, m; string s; int mem [N][M][M]; int dp( int left, int width, int curr ){ if( left == 0 ) return 1; int &ret = mem[left][width][curr]; if( ret != -1 ) return ret; ret = 0; for( int nxt = -1 ; nxt <= 1 ; nxt += 2 ){ int newCurr = curr + nxt; int newWidth = width; if( newCurr < 0 ){ newWidth ++; newCurr ++; }else if( newCurr > newWidth ){ newWidth ++; } if( newWidth > 2 ) continue; ret += dp( left-1, newWidth, 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 = 0, width = 0; int ans = 0; for( int i = 0 ; i < n ; i ++ ){ if( s[i] == 'P' ){ int newCurr = curr-1; int newWidth = width; if( newCurr < 0 ){ newWidth ++; newCurr ++; }else if( newCurr > width ){ newWidth ++; } int add = dp( n-i-1, newWidth, newCurr); //cout << " -> add " << add << endl ; ans += add; ans %= m; } if( s[i] == 'L' ) curr --; else curr ++; if( curr < 0 ){ width ++; curr ++; }else if( curr > width ){ width ++; } } 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...