Submission #447946

#TimeUsernameProblemLanguageResultExecution timeMemory
447946blueLinear Garden (IOI08_linear_garden)C++17
100 / 100
39 ms6248 KiB
#include <iostream> #include <string> using namespace std; int N, M; int pow2[1000001]; int main() { cin >> N >> M; string S; cin >> S; pow2[0] = 1; for(int i = 1; i <= 1e6; i++) pow2[i] = (2 * pow2[i-1]) % M; int res = 0; int last_block = -1; //left position of block for(int i = 0; i < N; i++) { if(S[i] == 'L') { if(i > 0 && S[i] == S[i-1]) last_block = i-1; continue; } int x = N-i; int k = x/2; if(last_block == -1) { if(x % 2) { if(i == 0) res = (res + pow2[k] + pow2[k] - 1) % M; else if(S[i-1] == 'L') { res = (res + pow2[k]) % M; } else if(S[i-1] == 'P') { res = (res + pow2[k] + pow2[k] - 1) % M; } } else { if(i == 0) res = (res + pow2[k] + pow2[k-1] - 1) % M; else if(S[i-1] == 'L') { res = (res + pow2[k-1]) % M; } else if(S[i-1] == 'P') { res = (res + pow2[k] + pow2[k-1] - 1) % M; } } } else if(S[last_block] == 'L' && last_block % 2 == i % 2 && x % 2 == 0) { continue; } else if(S[last_block] == 'L' && last_block % 2 == i % 2 && x % 2 == 1) { continue; } else if(S[last_block] == 'L' && last_block % 2 != i % 2 && x % 2 == 0) { res = (res + pow2[k-1]) % M; } else if(S[last_block] == 'L' && last_block % 2 != i % 2 && x % 2 == 1) { res = (res + pow2[k]) % M; } else if(S[last_block] == 'P' && last_block % 2 == i % 2 && x % 2 == 0) { continue; } else if(S[last_block] == 'P' && last_block % 2 == i % 2 && x % 2 == 1) { continue; } else if(S[last_block] == 'P' && last_block % 2 != i % 2 && x % 2 == 0) { res = (res + pow2[k-1]) % M; } else /*if(S[last_block] == 'P' && last_block % 2 != i % 2 && x % 2 == 1)*/ { res = (res + pow2[k]) % M; } if(i > 0 && S[i] == S[i-1]) last_block = i-1; } res = (res + 1) % M; cout << res << '\n'; }
#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...