纯模拟30分QAQ
查看原帖
纯模拟30分QAQ
705879
him0715楼主2023/2/4 16:28
#include <bits/stdc++.h>
using namespace std;
int n,a[10010],ans;bool b[10010],c[10010],flag=true;
void dfs(int now){
	if(a[now]==1){
		if(b[now-1]==false){
			if(b[now]==false)b[now+1]=true;
			else if(b[now+1]==false)b[now]=true;
			else return;
		}
		else if(b[now]==true || b[now+1]==true)return;
	}
	else if(a[now]==2){
		if(b[now-1]==false){
			if(b[now]==false || b[now+1]==false)return;
			else b[now]=true,b[now+1]=true;
		}
		else {
			if(b[now]==true && b[now+1]==true)return;
			else if(b[now]==false)b[now+1]=true;
			else if(b[now+1]==false)b[now]=true;
			else if(b[now]==false && b[now+1]==false){
				for(int i=0;i<2;i++)b[now]=i,dfs(now+1);
			}
		}
	}
	else if(a[now]==3){
		if(b[now-1]==false || b[now]==false || b[now+1]==false)return;
		b[now-1]=b[now]=b[now+1]=true;
	}
	if(now==n && flag==true){ans++;flag=false;return;}
	dfs(now+1);
}
int main(){
	cin>>n;
	for(int i=0;i<n;i++)cin>>a[i];
	if(a[0]>=3 || a[n-1]>=3){cout<<0<<endl;return 0;}
	b[0]=true;
	dfs(0);
	memset(b,false,sizeof(b));memset(c,false,sizeof(c));flag=true;
    dfs(0);
    cout<<ans<<endl;
    return 0;
}
2023/2/4 16:28
加载中...