Submission #1266337

#TimeUsernameProblemLanguageResultExecution timeMemory
1266337PlayVoltzLinear Garden (IOI08_linear_garden)C++20
0 / 100
110 ms131072 KiB
#include <cstdio>
#include <stdio.h>
#include <stdbool.h>
#include <iostream>
#include <map>
#include <vector>
#include <climits>
#include <stack>
#include <string>
#include <queue>
#include <algorithm>
#include <set>
#include <unordered_set>
#include <unordered_map>
#include <cmath>
#include <cctype>
#include <bitset>
#include <iomanip>
#include <cstring>
#include <numeric>
#include <cassert>
#include <random>
#include <fstream>
using namespace std;

#define pii pair<int, int>
#define mp make_pair
#define pb push_back
#define fi first
#define se second

int n, m, dp[1000005][3][3][3];
string s;

int garden(int i, int low, int high, int d){
	while (low<0)++low, ++high, ++d;
	while (high>2)--high, --low, --d;
	if (high-low>2)return 0;
	if (i==n-1)return dp[i][low][high][d]=1;
	if (dp[i][low][high][d]!=-1)return dp[i][low][high][d];
	return dp[i][low][high][d]=(garden(i+1, low, max(high, d+1), d+1)+garden(i+1, min(low, d-1), high, d-1))%m;
}

int32_t main(){
	cin>>n>>m>>s;
	memset(dp, -1, sizeof(dp));
	int ans=(garden(0, 0, 1, 1)+garden(0, 1, 2, 1))%m;
	for (int i=0, low=0, high=0, d=0; i<n; ++i){
		if (s[i]=='L')ans=(ans-garden(i, low, max(high, d+1), d+1)+m)%m, --d, low=min(low, d);
		else ++d, high=max(high, d);
	}
	cout<<ans;
}
#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...