Submission #486471

#TimeUsernameProblemLanguageResultExecution timeMemory
486471AlexandruabcdeLinear Garden (IOI08_linear_garden)C++14
100 / 100
45 ms16924 KiB
#include <bits/stdc++.h> using namespace std; constexpr int NMAX = 1e6 + 2; int N, M; char ch[NMAX]; int dp[NMAX][2][2]; /// 0 -> L; 1 -> P; void Read () { ios_base::sync_with_stdio(false); cin.tie(nullptr); cin >> N >> M; for (int i = 1; i <= N; ++ i) cin >> ch[i]; } void Precalculate () { for (int i = 0; i < 2; ++ i ) for (int j = 0; j < 2; ++ j ) dp[1][i][j] = dp[0][i][j] = 1; for (int i = 2; i <= N; ++ i ) { dp[i][0][0] = (1LL * dp[i-1][1][0] + 1LL * dp[i-2][1][1]) % M; dp[i][0][1] = (1LL * dp[i-1][1][1]) % M; dp[i][1][0] = (1LL * dp[i-1][0][0]) % M; dp[i][1][1] = (1LL * dp[i-1][0][1] + 1LL * dp[i-2][0][0]) % M; } } void Solve () { int bef_dublu = 2; int dublu = 2; int ans = 0; for (int i = 1; i <= N; ++ i ) { if (ch[i] == 'L') { if (ch[i-1] == 'L'){ bef_dublu = dublu; dublu = 0; } continue; } if (ch[i-1] == 'P') { bef_dublu = dublu; dublu = 1; } if (dublu == 2) { if (i == 1) ans = (1LL * ans + M + 1LL * dp[N-i+1][0][0] + 1LL * dp[N-i+1][0][1] - 1) % M; else ans = (1LL * ans + 1LL * dp[N-i+1][0][1]) % M; } if (dublu == 1) { if (ch[i-1] == 'P') { if (bef_dublu == 0) ans = (1LL * ans + 1LL * dp[N-i+1][0][1]) % M; else ans = (1LL * ans + M + 1LL * dp[N-i+1][0][1] + 1LL * dp[N-i+1][0][0] - 1) % M; } else ans = (1LL * ans + dp[N-i+1][0][1]) % M; } } cout << (ans+1) % M << '\n'; } int main () { Read(); Precalculate(); Solve(); 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...