제출 #310425

#제출 시각아이디문제언어결과실행 시간메모리
310425TemmieLinear Garden (IOI08_linear_garden)C++17
86 / 100
118 ms1436 KiB
#include <bits/stdc++.h>

typedef long long ll;

ll pow(ll x, ll p, ll m) {
	p %= 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...