Submission #343308

#TimeUsernameProblemLanguageResultExecution timeMemory
343308keta_tsimakuridzeLinear Garden (IOI08_linear_garden)C++14
100 / 100
70 ms6388 KiB
#include <bits/stdc++.h> using namespace std; const int N = 1e6+5; int n, mod, s, ans, pwr[N]; map<int,int> fix; string a; bool ok(){ if(abs(s) > 2) return 0; if( fix[-2] && fix[1] + fix[2]) return 0; if( fix[2] && fix[-1] ) return 0; return 1; } int main() { cin >> n >> mod; cin >> a; a = '$' + a; pwr[0] = 1; for(int i=1; i<=n; i++) pwr[i] = pwr[i-1] * 2 % mod; for(int i=1; i<=n; i++) { if ( a[i] == 'P' ){ s -- ; fix[s] ++; if ( ok() ) { if ( fix[2] || fix[-2]) { if ( abs(s) == 1) ans += pwr [ (n - i + 1)/2]; else ans += pwr [ (n - i)/2]; } else { if( fix[-1] && fix [1]){ if (!s) ans += pwr [ (n - i + 1)/2]; else ans +=pwr [ (n - i)/2]; } else { ans += (pwr [ (n - i + 1)/2] + pwr [ (n - i )/2] - 1 + mod) % mod; } } ans %=mod; } fix[s] --; s += 2; } else s --; fix [s] ++; } cout << (ans + 1)%mod ; }
#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...