Submission #114529

#TimeUsernameProblemLanguageResultExecution timeMemory
114529popovicirobertLinear Garden (IOI08_linear_garden)C++14
100 / 100
74 ms37624 KiB
#include <bits/stdc++.h> #define lsb(x) (x & (-x)) #define ll long long #define ull unsigned long long // 217 // 44 using namespace std; const int MAXN = (int) 1e6; char str[MAXN + 1]; int dp[MAXN + 1][3][3], m; inline void mod(int &x) { if(x >= m) x -= m; } inline void add(int &x, int y) { x += y; mod(x); } int main() { //ifstream cin("A.in"); //ofstream cout("A.out"); int i, n; ios::sync_with_stdio(false); cin.tie(0), cout.tie(0); cin >> n >> m >> str + 1; dp[0][0][0] = 1; for(i = 0; i < n; i++) { for(int l = 0; l < 3; l++) { for(int p = 0; p < 3; p++) { if(l < 2) { add(dp[i + 1][l + 1][max(p - 1, 0)], dp[i][l][p]); } if(p < 2) { add(dp[i + 1][max(l - 1, 0)][p + 1], dp[i][l][p]); } } } } int ans = 1; int best_p = 0, best_l = 0; for(i = 1; i <= n; i++) { if(str[i] == 'P' && best_l < 2) { // L int cur_p = max(best_p - 1, 0); int cur_l = best_l + 1; for(int l = 0; l < 3; l++) { for(int p = 0; p < 3; p++) { if(cur_p + p <= 2 && cur_l + l <= 2) { add(ans, dp[n - i][l][p]); } } } } if(str[i] == 'P') { best_p++; best_l--; } else { best_l++; best_p--; } best_l = max(best_l, 0); best_p = max(best_p, 0); } cout << ans; //cin.close(); //cout.close(); return 0; }

Compilation message (stderr)

linear_garden.cpp: In function 'int main()':
linear_garden.cpp:32:26: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
     cin >> n >> m >> str + 1;
                      ~~~~^~~
#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...