Wa #5 捞
查看原帖
Wa #5 捞
948249
tkm2013楼主2025/1/22 08:14
#include<bits/stdc++.h>
#define int long long
using namespace std;
int t,n;
struct no{
	int sf;
	bool dy,jy;
}a[25];
bool vis[25];
int op[25],id1[25],id2[25];
bool ss[25],cz[25];//生死,是否操作
bool nd[25],nj[25];//女巫的毒药,解药是否用过
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>t>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i].sf;
		vis[i]=1;
		if(a[i].sf==4){
			a[i].dy=1;
			a[i].jy=1;
		}
	}
	while(t--){
		int m;
		cin>>m;
		for(int i=1;i<=m;i++){
			cin>>op[i]>>id1[i]>>id2[i];
		}
		//判断是否错误
		for(int i=1;i<=n;i++){
			ss[i]=vis[i];
			cz[i]=0;
			if(a[i].sf==4){
				nd[i]=a[i].dy;
				nj[i]=a[i].jy;
			}
		}
		bool flag=0;
		for(int i=1;i<=m;i++){
			if(id1[i]>n || id2[i]>n || id1[i]<1 || id2[i]<1){
				flag=1;
				break;
			}
			int l=id1[i],r=id2[i];
			if(op[i]==0){
				if(a[l].sf!=1){
					flag=1;
					break;
				}
				if(cz[l]){
					flag=1;
					break;
				}
				if(!ss[r]){
					flag=1;
					break;
				}
				if(l==r){
					flag=1;
					break;
				}
				ss[r]=0;
				cz[l]=1;
			}
			if(op[i]==1){
				if(a[l].sf!=4){
					flag=1;
					break;
				}
				if(cz[l]){
					flag=1;
					break;
				}
				if(!ss[r]){
					flag=1;
					break;
				}
				if(!nd[l]){
					flag=1;
					break;
				}
				if(l==r){
					flag=1;
					break;
				}
				nd[l]=0;
				cz[l]=1;
				ss[r]=0;
			}
			if(op[i]==2){//复活吧,我的爱人
				if(a[l].sf!=4){
					flag=1;
					break;
				}
				if(cz[l]){
					flag=1;
					break;
				}
				if(ss[r]){
					flag=1;
					break;
				}
				if(!vis[r]){
					flag=1;
					break;
				}
				if(!nj[l]){
					flag=1;
					break;
				}
				ss[r]=1;
				cz[l]=1;
				nj[l]=0;
//				cz[r]=0;
			}
			if(op[i]==3){
				if(a[l].sf!=3){
					flag=1;
					break;
				}
				if(cz[l]){
					flag=1;
					break;
				}
//				if(!vis[l]){
//					flag=1;
//					break;
//				}
				if(ss[l]){
					flag=1;
					break;
				}
				if(!ss[r]){
					flag=1;
					break;
				}
				if(l==r){
					flag=1;
					break;
				}
				cz[l]=1;
				ss[r]=0;
			}
			if(op[i]<0 || op[i]>3){
				flag=1;
				break;
			}
		}
		for(int i=1;i<=n;i++){
			if(a[i].sf!=3){
				continue;
			}
			if(vis[i] && !ss[i] && !cz[i]){
				flag=1;
				break;
			}
		}
		if(flag){
			cout<<"Wrong\n";
			continue;
		}
		int cnt=0;
		for(int i=1;i<=n;i++){
			if(vis[i] && !ss[i]){
				cnt++;
			}
		}
		if(!cnt){
			cout<<"Safe\n";
		}else{
			cout<<cnt<<' ';
			for(int i=1;i<=n;i++){
				if(vis[i] && !ss[i]){
					cout<<i<<' ';
				}
			}
			cout<<"\n";
		}
		for(int i=1;i<=n;i++){
			vis[i]=ss[i];
			if(a[i].sf==4){
				a[i].dy=nd[i];
				a[i].jy=nj[i];
			}
		}
	}
	return 0;
}
/*
2 7
1 2 3 4 1 2 3
1
1 4 2
1
1 4 1
*/

rt

2025/1/22 08:14
加载中...