ARC175A题蒟蒻WA了四个点调不出来求助大佬
  • 板块学术版
  • 楼主Liyuqiao11
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/3/25 21:20
  • 上次更新2024/3/26 00:24:34
查看原帖
ARC175A题蒟蒻WA了四个点调不出来求助大佬
648772
Liyuqiao11楼主2024/3/25 21:20
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+10,md=998244353; 
#define int long long
int n,p[N],ans,bz[N];
char s[N];
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>p[i];
	}
	for(int i=1;i<=n;i++){
		cin>>s[i];
	}
	if(s[1]=='?'){
		bool flag=true;
		int cnt=1;
		bz[p[1]]=1;
		for(int i=2;i<=n;i++){
			if(p[i]==n){
				if(bz[1]!=0&&s[p[i]]=='?') cnt=(cnt*2)%md;
				if(s[p[i]]=='R'&&bz[1]==0){
					flag=false;
					break;
				}
			}
			else{
				if(bz[p[i]+1]!=0&&s[p[i]]=='?') cnt=(cnt*2)%md;
				if(s[p[i]]=='R'&&bz[p[i]+1]==0){
					flag=false;
					break;
				}
			}
			if(bz[p[i]]!=0){
				flag=false;
				break;
			}
			bz[p[i]]=1;
		}
		if(flag){
			ans=(ans+cnt)%md;
		}
		for(int i=1;i<=n;i++) bz[i]=0;
		if(p[1]==n) bz[1]=1;
		else bz[p[1]+1]=1;
		flag=true;
		cnt=1;
		for(int i=2;i<=n;i++){
			if(bz[p[i]]!=0&&s[p[i]]=='?') cnt=(cnt*2)%md;
			if(s[p[i]]=='L'&&bz[p[i]]==0){
				flag=false;
				break;
			}
			if(p[i]==n){
				if(bz[1]!=0){
					flag=false;
					break;
				}
				bz[1]=1; 
			}
			else{
				if(bz[p[i]+1]!=0){
					flag=false;
					break;
				}
				bz[p[i]+1]=1;
			}
		}
		if(flag){
			ans=(ans+cnt)%md;
		}
	}
	if(s[1]=='L'){
		bool flag=true;
		int cnt=1;
		bz[p[1]]=1;
		for(int i=2;i<=n;i++){
			if(p[i]==n){
				if(bz[1]!=0&&s[p[i]]=='?') cnt=(cnt*2)%md;
				if(s[p[i]]=='R'&&bz[1]==0){
					flag=false;
					break;
				}
			}
			else{
				if(bz[p[i]+1]!=0&&s[p[i]]=='?') cnt=(cnt*2)%md;
				if(s[p[i]]=='R'&&bz[p[i]+1]==0){
					flag=false;
					break;
				}
			}
			if(bz[p[i]]!=0){
				flag=false;
				break;
			}
			bz[p[i]]=1;
		}
		if(flag){
			ans=(ans+cnt)%md;
		}
	}
	if(s[1]=='R'){
		if(p[1]==n) bz[1]=1;
		else bz[p[1]+1]=1;
		bool flag=true;
		int cnt=1;
		for(int i=2;i<=n;i++){
			if(bz[p[i]]!=0&&s[p[i]]=='?') cnt=(cnt*2)%md;
			if(s[p[i]]=='L'&&bz[p[i]]==0){
				flag=false;
				break;
			}
			if(p[i]==n){
				if(bz[1]!=0){
					flag=false;
					break;
				}
				bz[1]=1; 
			}
			else{
				if(bz[p[i]+1]!=0){
					flag=false;
					break;
				}
				bz[p[i]+1]=1;
			}
		}
		if(flag){
			ans=(ans+cnt)%md;
		}
	}
	cout<<ans<<endl;
	return 0;
} 
2024/3/25 21:20
加载中...