Submission #1002842

#TimeUsernameProblemLanguageResultExecution timeMemory
1002842TobLinear Garden (IOI08_linear_garden)C++14
100 / 100
11 ms10300 KiB
#include <bits/stdc++.h>

#define ll long long
#define F first
#define S second
#define all(x) x.begin(), x.end()
#define pb push_back
#define FIO ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0)

using namespace std;

typedef pair <ll, ll> pii;

const int N = 1e6 + 7;

int n, mod;
string s;
ll ps[N];

int main () {
	FIO;
	cin >> n >> mod >> s;
	
	ps[n] = ps[n-1] = 1;
	for (int i = n-2; i >= 0; i--) {
		ps[i] = 2*ps[i+2] % mod;
	}
	
	ll res = 1;
	
	int la = 0;
	for (int i = 0; i < n; i++) {
		if (i > 1 && s[i-1] == s[i-2]) la = i-1;
		if (s[i] == 'L') continue;
		if (la && s[la] == 'L' && s[i-1] == 'L') continue;
		if (!i) res = (res + ps[0] + ps[1] - 1 + mod) % mod;
		else if (s[i-1] == 'L') res = (res + ps[i+1]) % mod;
		else {
			if (!la) res = (res + ps[i] + ps[i+1] + mod - 1) % mod;
			else res = (res + ps[i+1]) % mod;
		}
	}
	
	cout << res;

	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...