WA#6 #10 玄关求 Hack
查看原帖
WA#6 #10 玄关求 Hack
947881
liuyize549330楼主2025/1/22 08:33
#include <bits/stdc++.h>
using namespace std;
const int N=25;
int t,n;
int career[N];// 1 狼人 2 平民 3 猎人 4 女巫 
int alive[N];
int b[N];
bool jineng[N];
bool jy[N],dy[N];
bool bjy[N],bdy[N];
int main(){
	cin>>t>>n;
	for(int i=1;i<=n;i++){
		cin>>career[i];
		alive[i]=1;
		if(career[i]==4) jy[i]=1;dy[i]=1;
		}
	while(t--){
		int m;
		cin>>m;
		bool wrong=0;
		for(int i=1;i<=n;i++) b[i]=alive[i],jineng[i]=0;//存一下夜晚开始前的状态 
		for(int i=1;i<=n;i++){
			bjy[i]=jy[i];
			bdy[i]=dy[i];
		}
		vector<int> v;
		vector<int> v2;//
		while(m--){ 
			int o;
			cin>>o;
			int id1,id2;
			cin>>id1>>id2;
			if(wrong) continue;
			if(id1>n||id2>n||id1<1||id2<1) wrong=1;
			if((o!=2&&o!=3)&&(!alive[id1]||!alive[id2])) wrong=1;
			if(career[id1]!=2&&jineng[id1]) wrong=1;
			if(o==3&&alive[id1]) wrong=1;
			if(career[id1]==2) wrong=1;
			bool r=0;
			for(int i=0;i<v.size()&&!r;i++) r=r||v[i]==id2; 
			if(o==2&&(alive[id2]||!r)) wrong=1;
			if(o!=2&&id1==id2) wrong=1;
			if(o==1&&!dy[id1]) wrong=1;
			if(o==2&&!jy[id1]) wrong=1;
			if(o==0&&career[id1]!=1) wrong=1;
			if((o==1||o==2)&&career[id1]!=4) wrong=1;
			if(o==3&&career[id1]!=3) wrong=1; 
			if(jineng[id1]) wrong=1;
			if(wrong) continue;
			if(o==0){
				jineng[id1]=1;
				alive[id2]=0;
				if(career[id2]==3) v2.push_back(id2);
				v.push_back(id2);
			}else if(o==1){
				jineng[id1]=1;
				alive[id2]=0;
				if(career[id2]==3) v2.push_back(id2);
				v.push_back(id2);
				dy[id1]=0;
				if(career[id2]==3) jineng[id2]=0; 
			}else if(o==2){
				jineng[id1]=1;
				alive[id2]=1;
				for(int i=0;i<v.size();i++){
					if(v[i]==id2) v.erase(v.begin()+i,v.begin()+i+1); 
				}
				jy[id1]=0;
			}else{
				jineng[id1]=1;
				alive[id2]=0;
				if(career[id2]==3) v2.push_back(id2);
				v.push_back(id2);
			}
		}
		for(int i=0;i<v2.size()&&(!wrong);i++){
			if(!jineng[v2[i]]&&!alive[v2[i]]) wrong=1;
		}
		for(int i=1;i<=n;i++) if(bjy[i]==1&&bdy[i]==1&&jy[i]==0&&dy[i]==0) wrong=1; 
		if(wrong){
			puts("Wrong");
			for(int i=1;i<=n;i++) alive[i]=b[i];
			for(int i=1;i<=n;i++) jy[i]=bjy[i],dy[i]=bdy[i];
		}else{
			if(v.size()){
				cout<<v.size()<<" ";
				sort(v.begin(),v.end());
				for(int i=0;i<v.size();i++) cout<<v[i]<<" ";
				puts("");
			}else puts("Safe");
		}
	}
	return 0;
}
2025/1/22 08:33
加载中...