제출 #310427

#제출 시각아이디문제언어결과실행 시간메모리
310427TemmieLinear Garden (IOI08_linear_garden)C++17
100 / 100
128 ms1556 KiB
#include <bits/stdc++.h> typedef long long ll; ll pow(ll x, ll p, ll m) { ll r = 1; while (p) { if (p & 1LL) r = (r * x) % m; x = (x * x) % m; p >>= 1LL; } return r; } void rem(ll& x, ll m) { x--; while (x >= m) x -= m; while (x < 0) x += m; } ll add(ll x, ll y, ll m) { x += y; while (x >= m) x -= m; while (x < 0) x += m; return x; } int main() { std::ios::sync_with_stdio(0); std::cin.tie(0); ll n, m; std::cin >> n >> m; std::string s; std::cin >> s; ll l = 0, r = 0, now = 0, ans = 0; for (ll i = 0; i < n; i++) { if (s[i] == 'L') now++, r = std::max(r, now); else { ll rr = std::max(r, now + 1LL); ll rn = n - i - 1LL; if (!(rr - l - 1LL)) ans = add(ans, pow(2LL, rn >> 1LL, m), m), ans = add(ans, pow(2LL, (rn + 1LL) >> 1LL, m), m), rem(ans, m); else if (!(rr - l - 2)) { if (now + 1LL == rr - 1LL) ans = add(ans, pow(2LL, (rn + 1LL) >> 1LL, m), m); else ans = add(ans, pow(2LL, rn >> 1LL, m), m); } now--, l = std::min(l, now); } } std::cout << add(ans, 1LL, m) << "\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...