Submission #924068

#TimeUsernameProblemLanguageResultExecution timeMemory
924068thinknoexitLinear Garden (IOI08_linear_garden)C++17
100 / 100
18 ms9052 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const int N = 1000001; /* L + P - [0, 2] [-1, 1] [-2, 0] */ int pw[N], n, MOD; int v[N]; int solve() { int ans = 0; int c = 0; for (int i = n;i >= 1;i--) { int idx = n - i + 1; int now = v[idx]; if (now == 0) { c++; } else { if (c == 1) { ans = (ans + pw[(i - 1) / 2]) % MOD; } c--; } } return ans; } int main() { cin.tie(nullptr)->sync_with_stdio(false); cin >> n >> MOD; int c = 0, mn = 0; pw[0] = 1; for (int i = 1;i <= n;i++) { pw[i] = pw[i - 1] * 2 % MOD; char s; cin >> s; if (s == 'L') v[i] = 0, c++; else v[i] = 1, c--; mn = min(mn, c); } if (mn == 0) { cout << (solve() + 1) % MOD; return 0; } if (mn == -1) { int ans = pw[n / 2]; c = 0; for (int i = n;i >= 1;i--) { int now = v[n - i + 1]; if (now == 0) { c++; } else { if (c == 0) { ans = (ans + pw[i / 2]) % MOD; } c--; } } cout << ans; return 0; } int all1 = (pw[n / 2] - 1 + MOD) % MOD; int ans = all1; ans = (ans + pw[(n + 1) / 2]) % MOD; for (int i = 1;i <= n;i++) v[i] ^= 1; cout << (ans + (all1 - solve() + MOD) % MOD) % MOD; 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...