社区讨论

20pts求条

P11601『Fwb』狼人の杀戮参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhji41dg
此快照首次捕获于
2025/11/04 02:56
4 个月前
此快照最后确认于
2025/11/04 02:56
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int rs [30] , tot , ld [30] , ldy [30] , ljy [30] , sf [30] , ltot , lnt [30] , ldie [30] , lr , lr1 , nt [30];
bool die [30] , dy [30] , jy [30] , xd [30] , kq [30] , f [30];
signed main() {
	int t , n;
	cin >> t >> n;
	for(int i = 1 ; i <= n ; i ++)
		cin >> sf [i];
	for(int k = 1 ; k <= t ; k ++)
	{
		int m;
		cin >> m;
		bool f1 = 0 , f2 = 0 ;
		tot = 0;
		for(int i = 1 ; i <= n ; i ++)
		{
			ltot = tot;
			ldy [i] = dy [i];
			ljy [i] = jy [i];
			ldie [i] = die [i];
			lnt [i] = nt [i];
		}
//		for(int i = 1 ; i <= n ; i ++)
//		{
//			cout << ldy [i] << " ";
//			cout << ljy [i] << " ";
//			cout <<  ldie [i] << " ";
//			cout << lnt [i] << " ";
//			cout << endl;
//		}
		memset(xd , 0 , sizeof(xd));
		while(m --)
		{
			int x; 
			cin >> x;
			int d1 , d2;
			if(x == 0)
			{
				cin >> d1 >> d2;
				if(f2 == 0)
				{
					if(d1 == d2 || xd [d1] == 1 || sf [d1] != 1 || die [d2] == 1)
					{
//						cout << "l" << " "; 
	//					for(int i = 1 ; i <= n ; i ++)
	//					{
	//						cout << dy [i] << " ";
	//						cout << jy [i] << " ";
	//						cout <<  die [i] << " ";
	//						cout << nt [i] << " ";
	//						cout << endl;
	//					}
						f2 = 1;
					}
					else
					{
//						cout << "l" << endl; 
						die [d2] = 1;
						xd [d1] = 1;
						rs [++ tot] = d2;
						nt [d2] = k;
					} 
				} 
				
			}  
			if(x == 1)
			{
				cin >> d1 >> d2;
				if(f2 == 0)
				{
					if(d1 == d2 || xd [d1] == 1 || sf [d1] != 4 || die [d2] == 1 || dy [d2] == 1)
					{
//						cout << "nd" << " ";
						f2 = 1;
					}
					else
					{
//						cout << "nd" << endl;
						die [d2] = 1;
						xd [d1] = 1;
						dy [d1] = 1;
						rs [++ tot] = d2;
						nt [d2] = k;
					}
				}
				
			}
			if(x == 2)
			{
				cin >> d1 >> d2;
				if(f2 == 0)
				{
					if(xd [d1] == 1 || sf [d1] != 4 || die [d2] == 0 || nt [d2] != k || jy [d2] == 1)
					{
//						cout << "nj" << " "; 
						f2 = 1;
					}
					else
					{
//						cout << "nj" << endl; 
						if(sf [d2] == 3)	xd [d2] = 0;
						die [d2] = 0;
						xd [d1] = 1;
						jy [d1] = 1;
						nt [d2] = 0;
					}
				}
			}
			if(x == 3)
			{
				cin >> d1 >> d2;
				if(f2 == 0)
				{
					if(xd [d1] == 1 || sf [d1] != 3 || die [d2] == 1 || die [d1] == 0)
					{
//						cout << "lr" << " "; 
						f2 = 1;
					}
					else
					{
						lr = d2;
						lr1 = d1;
						xd [d1] = 1;
					}
				}
			} 
		}
		for(int i = 1 ; i <= n; i ++)
		{
			if(xd [i] == 1 && f [i] == 0 && sf [i] == 3)
			{
//				cout << "lr" << endl; 
				die [lr] = 1;
				nt [lr] = k;
				rs [++ tot] = lr;
				f [i] = 1;
			}
			if(sf [i] == 3 && die [i] == 1 && xd [i] == 0 && f [i] == 0)
			{
//				cout << i << "lr" << endl; 
				f2 = 1;
				f [i] = 1;
				break;
			}
		}
		
		if(f2 == 0)
		{
//			for(int i = 1 ; i <= n ; i ++)
//				cout << die [i] << " ";
//			cout << endl;
//			for(int i = 1 ; i <= n ; i ++)
//			{
//				cout << dy [i] << " ";
//				cout << jy [i] << " ";
//				cout << die [i] << " ";
//				cout << nt [i] << " ";
//				cout << endl;
//			}
			for(int i = 1 ; i <= n ; i ++)
				for(int j = 1 ; j <= n ; j ++)
					if(nt [i] == k && die [rs [j]] == 1 && rs [j] == i)	f1 = 1;
			if(f1 == 1)
			{
				cout << tot << " "; 
				for(int i = 1 ; i <= n ; i ++)
				{
					for(int j = 1 ; j <= n ; j ++)
					{
						if(nt [i] == k && die [rs [j]] == 1 && rs [j] == i)	cout << i << " ";
					}
				}
					
			}
			else	cout << "Safe";
			cout << endl;
		} 
		else
		{
			cout << "Wrong" << endl;
			for(int i = 1 ; i <= n ; i ++)
			{
				tot = ltot;
				dy [i] = ldy [i];
				jy [i] = ljy [i];
				die [i] = ldie [i];
				nt [i] = lnt [i];
			}
		}
	}
    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...