Submission #1229912

#TimeUsernameProblemLanguageResultExecution timeMemory
1229912Uniq0rnLinear Garden (IOI08_linear_garden)C++20
100 / 100
11 ms5456 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define all(x) begin(x),end(x) #define sz(x) (int)x.size() #define ul unsigned long long int gcd(int a,int b) {return b == 0 ? a:gcd(b,a%b);} const int N = 1e6 + 10; int pw[N]; int main() { cin.tie(0)->sync_with_stdio(false); int n,m;cin >> n >> m; string s;cin >> s; pw[0] = 1; for(int i=1;i<N;i++){ pw[i] = pw[i - 1] * 2 % m; } int ans = 0; int diff = 0,mx = 0,mn = 0; for(int i=0;i<n;i++){ if(s[i] == 'P'){ int k = n - i - 1; int ndiff = diff + 1; int nmx = max(mx,ndiff); int nmn = min(mn,ndiff); ll res = 0; if(nmx - nmn <= 2){ if(nmx - nmn == 2){ if(nmx == ndiff || nmn == ndiff){ res = pw[k / 2]; } else{ res = pw[(k + 1) / 2]; } } else{ res = (pw[k / 2] + pw[(k + 1) / 2] - 1 + m) % m; } } ans = (ans + res) % m; } if(s[i] == 'L'){ diff++; } else diff--; mn = min(mn,diff); mx = max(mx,diff); } cout << (ans + 1) % m; 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...