제출 #343308

#제출 시각아이디문제언어결과실행 시간메모리
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...