Submission #1089815

#TimeUsernameProblemLanguageResultExecution timeMemory
1089815peacebringer1667Linear Garden (IOI08_linear_garden)C++17
100 / 100
147 ms65388 KiB
#include<bits/stdc++.h>
#define ll long long
#define ldb long double
#define fi first
#define se second
#define sza(a) (int)a.size()
#define pir pair<int,int>
#define pirll pair<ll,ll>
using namespace std;
const int maxn = 1e6 + 5;
const int alp = 4;

int modu;

inline void add(int &x,int y){
	x %= modu;y %= modu;
	x = (x + y) % modu;
}

int dp[maxn][alp][alp];
void prepare_dp(int n){
	dp[n + 1][0][0] = 1;
    for (int p = n ; p > 0 ; p--){
    	for (int i = 0 ; i <= 2 ; i++)
    	  for (int j = 0 ; j <= 2 ; j++){
    	    if (i < 2)
    	    	add(dp[p][i + 1][max(j - 1,0)],dp[p + 1][i][j]);
			
		    if (j <= 2)
		    	add(dp[p][max(i - 1,0)][j + 1],dp[p + 1][i][j]);
			}
	}
}

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	
	int n;
	cin >> n >> modu;
	prepare_dp(n);
	string s;cin >> s;
    
    int res = 0,p = 0,c1 = 0;
    for (char c : s){
    	p++;
    	if (p > 1){
    		if (s[p - 2] == 'L')
    			c1++;
			else
				c1 = max(0,c1 - 1);
		}
    	
    	if (c == 'P'){
    		for (int i = 0 ; i + c1 + 1 <= 2 ; i++)
    		  for (int j = 0 ; j <= 2 ; j++)
    		    add(res,dp[p + 1][i][j]);
		}
	}
    
    add(res,1);
    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...