ZCMUOJ1204关于爱丽丝的游戏

OJ1204
Description

在不被人所知的地方住着一群活泼可爱的爱丽丝。有一天,一只鲍勃费劲千辛万苦来到了爱丽丝的聚集地,爱丽丝们不住地惊叹:

“!里这达到以可物生的丝丽爱了除有然竟!哪天”爱丽丝的语序似乎是倒过来的。

突然一头克里斯丁提议道,“为何我们不玩‘芮特兰游戏’呢?”

爱丽丝们好奇地将克里斯丁围住,你和一位大卫也凑了过去。克里斯丁在地上写下来长长的话:“
1、进行游戏的玩家,有两名,双方轮流进行决策;
2、游戏进行的要素,是n个生物和m个理想的团体;
3、n个生物中,其中一个生物为鲍勃,其余均为爱丽丝;
4、m个团体中,不管哪个都包括了鲍勃,并且存在一个团体,只包含了一只鲍勃;
5、决策时,决策者需要选择一个团体,将这个团体中还没有被吃掉的生物全部吃掉。请注意,每次决策必须吃掉至少一只生物,否则该决策不合法;
6、当没有合法的决策时,当前决策的玩家落败,它需要懊恼地将对方吃掉。”

爱莲兴奋地报名参加了游戏,大家经过深思熟虑选择了费列罗参加游戏,并且经过组委会商讨,决定让费列罗先手进行游戏。

大卫百思不得其解,它希望你能写一段程序,来判断在给定规则下、双方均采用最优策略将会如何。

希望你能灵活地思考这个问题。

Input

读入包括多组数据,第一行包含一个整数T,表示数据组数。 每组数据的第一行包括的两行n和m(1<=n<=16, 1<=m<=10000),之后的m行每行首先包含一个数字ki,之后有ki个在1到n之间的数字描述了一个团体包含的生物编号。方便起见,我们将鲍勃定为一号生物。

Output

对于每组数据,输出"Eleonora"或"Ferrero",分别对应是爱莲落败还是费列罗落败。

Sample Input
2
2 2
1 1
2 1 2
5 28
1 1
4 1 2 3 4
5 1 2 3 4 5
2 1 5
5 1 2 3 4 5
4 1 2 3 5
2 1 4
3 1 3 4
2 1 3
2 1 4
3 1 2 4
3 1 2 4
3 1 3 4
4 1 3 4 5
4 1 3 4 5
4 1 2 4 5
2 1 2
3 1 3 5
3 1 2 5
3 1 2 5
4 1 2 4 5
3 1 2 3
3 1 4 5
3 1 3 5
3 1 2 3
4 1 2 3 5
3 1 4 5
2 1 2
Sample Output
Eleonora
Eleonora

思路:水题,就是个尼姆博弈:2个人比,有多堆东西,当所有堆的东西总量的异或和为0就先手败,反之,后手败。这题就是2个人,但是n堆东西里都有他们俩的一个,那就相当于进行n次异或和就完事了。因此,题目中k[i]后面的数据编号是没用的。

#include<bits/stdc++.h>
using namespace std;
int a[50000], k[50000];
int main() {
    
    
	int t, n, m;
	cin >> t;
	while (t--) {
    
    
		int cnt = 0, ans = 0;
		cin >> n >> m;
		for (int i = 1; i <= m; i++) {
    
    
			cin >> k[i];
			ans ^= k[i];
			for (int j = 1; j <= k[i]; j++) {
    
    
				cin >> a[j];
			}
		}
		if (ans==0) {
    
    
			cout << "Ferrero" << endl;
		}
		else {
    
    
			cout << "Eleonora" << endl;
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_52480906/article/details/115892356