Submission #1309392

#TimeUsernameProblemLanguageResultExecution timeMemory
1309392khang2010Linear Garden (IOI08_linear_garden)C++20
100 / 100
49 ms36732 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; inline 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() { ios::sync_with_stdio(false); cin.tie(nullptr); int N; ll M; string S; cin >> N >> M >> S; // ways[len][hi][cur] static int ways[1000001][3][3]; // base: len = 0 for (int h = 0; h <= 2; h++) for (int c = 0; c <= h; c++) ways[0][h][c] = 1; // build DP for (int len = 1; len <= N; len++) { 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 += ways[len - 1][nh][nc]; } ways[len][h][c] = v % M; } } } // compute rank ll rank = 1; int hi = 0, cur = 0; for (int i = 0; i < N; i++) { int rem = N - i - 1; if (S[i] == 'P') { auto [nh, nc] = next_state(hi, cur, 'L'); if (nh != -1) rank = (rank + ways[rem][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...