Submission #1309391

#TimeUsernameProblemLanguageResultExecution timeMemory
1309391khang2010Linear Garden (IOI08_linear_garden)C++20
40 / 100
13 ms2308 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; pair<int,int> next_state(int hi, int cur, char c) { int ncur = cur + (c == 'L' ? 1 : -1); int nhi = hi; if (ncur < 0) { nhi = hi + 1; ncur = 0; } else { nhi = max(hi, ncur); } if (nhi > 2) return {-1, -1}; return {nhi, ncur}; } int main() { int N; ll M; string S; cin >> N >> M >> S; static ll ways[205][3][3]; memset(ways, 0, sizeof(ways)); // base for (int h = 0; h <= 2; h++) for (int c = 0; c <= h; c++) ways[N][h][c] = 1; // DP for (int i = N - 1; i >= 0; i--) { for (int h = 0; h <= 2; h++) { for (int c = 0; c <= h; c++) { ll v = 0; for (char ch : {'L', 'P'}) { auto [nh, nc] = next_state(h, c, ch); if (nh != -1) v = (v + ways[i + 1][nh][nc]) % M; } ways[i][h][c] = v; } } } // rank ll rank = 1; // numbering starts from 1 int hi = 0, cur = 0; for (int i = 0; i < N; i++) { if (S[i] == 'P') { auto [nh, nc] = next_state(hi, cur, 'L'); if (nh != -1) rank = (rank + ways[i + 1][nh][nc]) % M; } auto [nh, nc] = next_state(hi, cur, S[i]); hi = nh; cur = nc; } cout << rank % M << "\n"; 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...