#6WA 了怎么办
查看原帖
#6WA 了怎么办
1068500
sto__Liyhzh__orz楼主2025/1/22 15:27
#include<bits/stdc++.h>
#define endl '\n'
#define lowbit(x) (x)&(-x)
using namespace std;

typedef double db;
typedef long long ll;
typedef __int128 III;
const db eqs=1e-6;
const int inf=1e9;
void ll_cmax(ll &a,ll b){a=a>b?a:b;}
void ll_cmin(ll &a,ll b){a=a<b?a:b;}
void int_cmax(int &a,int b){a=a>b?a:b;}
void int_cmin(int &a,int b){a=a<b?a:b;}
bool db_eq(db a,db b){return fabs(a-b)<eqs;}
bool number(char ch){return ch>='0' && ch<='9';}
bool lowerchar(char ch){return ch>='a' && ch<='z';}
int sqlong(int n){int sq=sqrt(n)+1;return min(sq,n);}

const int MAXN=20+5; 
int n,m,a[MAXN],c[MAXN],bf[MAXN],d[MAXN];                             //c 为最近一次使用技能时间 (女巫单独存) 
pair<int,int>b1[MAXN],b2[MAXN],b[MAXN];                               //a 为身份,b 为是否死亡
vector<int>peo1,peo2;                                                 //今夜死的人 

void beifen()
{
	for(int i=1;i<=n;i++) bf[i]=c[i],b2[i]=b1[i];
}

void huanyuan()
{
	for(int i=1;i<=n;i++) c[i]=bf[i],b1[i]=b2[i];
	for(int i=0;i<peo1.size();i++) b[peo1[i]].second=b[peo1[i]].first=0;
}

void shanchu(int x)
{
	for(int i=peo1.size()-1;i>=0;i--)
	{
		int f=peo1[i];
		peo1.pop_back();
		if(x==f)
		{
			for(int j=0;j<peo2.size();j++) peo1.push_back(peo2[j]);
			peo2.clear();
			break;
		}
		peo2.push_back(f);
	}
	d[x]=0;
}

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
//	cout<<endl;
	cin>>m>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	int t;
	for(int k=1;k<=m;k++)
	{
		peo1.clear();beifen();for(int i=1;i<=n;i++) d[i]=0;
		cin>>t;
		int id,id1,id2,j=t; 
		bool flag=0;
		for(int i=1;i<=t;i++)
		{
			cin>>id>>id1>>id2;
			if(id1==2)
			{
				return -1; 
			}
			if(id==0)
			{
				if(a[id1]!=1 || id1==id2 || b[id1].first || b[id2].first || c[id1]==k) //身份不为狼、自己杀自己、已死亡 、一个夜晚重复使用技能 
				{
//					cout<<i<<" ";
					flag=1;
					j=i;
					break;
				}
				c[id1]=k;
				b[id2].first=1; 
				b[id2].second=k;
				peo1.push_back(id2);
				if(a[id2]==3) d[id2]=1;
			}
			if(id==3)
			{
				if(a[id1]!=3 || b[id1].second!=k || b[id2].first || c[id1]==k)
				{
//					cout<<a[id1]<<" "<<b[id1].second<<" "<<b[id2].first<<" "<<c[id1]<<" ";
					flag=1;
					j=i;
					break;
				}
				d[id1]=0;
				c[id1]=k;
				b[id2].first=1;
				b[id2].second=k;
				peo1.push_back(id2);
			}
			if(id==2)
			{
				if(a[id1]!=4 || b[id2].second!=k || b1[id1].first || b1[id1].second==k)
				{
//					cout/*<<a[id1]<<" "<<b[id2].second<<" "<<b1[id1].first<<" "<<b1[id1].second<<" "*/<<i<<" ";
					flag=1;
					j=i;
					break;
				}
				if(b[id1].first && id2!=id1)
				{
					flag=1;
					j=i;
					break;
				}
				b1[id1].first=k;
				b[id2].first=0;
				b[id2].second=0;
				shanchu(id2);
				if(a[id2]==3) c[id2]=0;
			}
			if(id==1)
			{
				if(a[id1]!=4 || id1==id2 || b[id1].first || b[id2].first || b1[id1].second || b1[id1].first==k) //身份不为女巫、自己杀自己、已死亡 、一个夜晚重复使用技能 
				{
//					cout<<i<<" ";	
					flag=1;
					j=i;
					break;
				}
				b1[id1].second=k;
				b[id2].first=1; 
				b[id2].second=k;
				peo1.push_back(id2);
				if(a[id2]==3) d[id2]=1;
			} 
		}
		int p,q,m;
		for(int i=j+1;i<=t;i++) cin>>p>>q>>m;
		for(int i=1;i<=n;i++) if(d[i]) {flag=1;/*cout<<i<<"kkk"<<" "*/;break;}
		if(flag)
		{
			cout<<"Wrong\n";
			huanyuan();
		}
		else if(peo1.size()==0) cout<<"Safe\n";
		else 
		{
			sort(peo1.begin(),peo1.end());
			cout<<peo1.size()<<" ";
			for(int i=0;i<peo1.size();i++) cout<<peo1[i]<<" ";
			cout<<endl;
		}
	}
	return 0;
}
//by Matrix_Power

2025/1/22 15:27
加载中...