#12玄关
查看原帖
#12玄关
927833
1835202011qwe楼主2025/1/22 19:40
#include<bits/stdc++.h>
using namespace std;
int t,n,nu;//0杀 1毒 2救 3枪 
int sf[25];//狼人1 平民2 猎人3 女巫4
bool li[25];//是否存活 
bool nj[25],nd[25];//巫解/毒 true没用过 
int main(){
	cin>>t>>n;
	int i,j;memset(nj,true,sizeof(nj));memset(nd,true,sizeof(nd));
	for(i=1;i<=n;i++){
		cin>>sf[i];li[i]=true;
	}int tt,us,be,x,dead[25];
	bool lit[25];//是否存活 
	bool njt[25],ndt[25];//巫解/毒 true没用过 
	bool dao[25],gu[25],wu[25];//是否 刀/枪/巫 人
	bool pd;//是否有效 
	for(i=1;i<=t;i++){
		cin>>nu;
		for(j=1;j<=n;j++){
			lit[j]=li[j];njt[j]=nj[j];ndt[j]=nd[j];
		}
		memset(dao,false,sizeof(dao));pd=true;
		memset(gu,false,sizeof(gu));memset(wu,false,sizeof(wu));x=0;
		for(j=1;j<=nu;j++){
			cin>>tt>>us>>be;
			if(tt>3||tt<0){pd=false;break;}
			if(us>n||be>n||us<1||be<1){pd=false;break;}
			if(!li[us]||!li[be]){pd=false;break;}
			if((!lit[us]&&(sf[us]!=3&&sf[us]!=4))||(!lit[be]&&(sf[us]!=4))){pd=false;break;}
			if((tt==0&&dao[us])||((tt==1||tt==2)&&wu[us])||(tt==3&&gu[us])){pd=false;break;}
			if((tt==1&&!ndt[us])||(tt==2&&!njt[us])){pd=false;break;}
			if(tt==3&&lit[us]){pd=false;break;}
			if(sf[us]==2){pd=false;break;}
			if(sf[us]==3&&lit[us]){pd=false;break;}
			if((tt==2&&!li[be])||(tt==2&&lit[be])){pd=false;break;}	
			if(tt==1&&!lit[be]){pd=false;break;}
			if(tt!=2&&(be==us)){pd=false;break;}
			if((tt==0&&sf[us]!=1)||((tt==1||tt==2)&&sf[us]!=4)||(tt==3&&sf[us]!=3)){pd=false;break;}
			if(tt==1&&!lit[us]){pd=false;break;}
			if(tt==0){
				lit[be]=false;dao[us]=true;
			}else if(tt==1){
				lit[be]=false;wu[us]=true;ndt[us]=false;
			}else if(tt==2){
				lit[be]=true;wu[us]=true;njt[us]=false;
				gu[be]=false;
			}else if(tt==3){
				gu[us]=true;lit[be]=false;
			}
		}for(j=j+1;j<=nu;j++)cin>>tt>>us>>be;
		for(j=1;j<=n;j++)if(sf[j]==3&&!lit[j]&&li[j]&&!gu[j])pd=false;
		if(!pd)cout<<"Wrong\n";
		else{
			memset(dead,0,sizeof(dead));
			for(j=1;j<=n;j++){
				if(li[j]&&!lit[j])dead[++x]=j,li[j]=lit[j];
				nd[j]=ndt[j];nj[j]=njt[j];
				
				
			}if(x==0)cout<<"Safe\n";
			else {
				printf("%d ",x);
				for(j=1;j<=x;j++)printf("%d ",dead[j]);
				cout<<endl;
			}
		}
	}
	return 0;
}
2025/1/22 19:40
加载中...