Submission #1275372

#TimeUsernameProblemLanguageResultExecution timeMemory
1275372cngkhanh_ti22Linear Garden (IOI08_linear_garden)C++20
75 / 100
129 ms131072 KiB
#include <bits/stdc++.h> using namespace std; // N up to 1,000,000 → we keep L as [N+2][3][3][2] static long long L[1000002][3][3][2]; static int S[1000002]; long long N, M; // Recursive function similar to Pascal's Tinh() long long Tinh(int i, int hl, int hp, int ok) { // Already computed → return memoized if (L[i][hl][hp][ok] != -1) return L[i][hl][hp][ok]; // Base: past the last position → 1 valid completion if (i > N) return L[i][hl][hp][ok] = 1 % M; long long ans = 0; // ----- Try placing 'L' (0) ----- if (hl < 2) { // cannot exceed balance int nextOk = ok | (0 < S[i]); // becomes 1 if we place smaller than target ans = Tinh(i + 1, hl + 1, max(0, hp - 1), nextOk); } // ----- Try placing 'P' (1) ----- if ((ok == 1 || S[i] == 1) && hp < 2) { // allowed only if <= target int nextOk = ok | (1 < S[i]); // actually stays same ans += Tinh(i + 1, max(0, hl - 1), hp + 1, nextOk); } return L[i][hl][hp][ok] = ans % M; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> N >> M; string garden; cin >> garden; // Convert garden letters to 0/1 for easier compare for (int i = 1; i <= N; ++i) { S[i] = (garden[i - 1] == 'P' ? 1 : 0); } // Initialize DP array to -1 (uncomputed) for (int i = 0; i <= N + 1; ++i) for (int hl = 0; hl < 3; ++hl) for (int hp = 0; hp < 3; ++hp) for (int ok = 0; ok < 2; ++ok) L[i][hl][hp][ok] = -1; long long result = Tinh(1, 0, 0, 0); result = (result % M + M) % M; // make sure non-negative cout << result << "\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...