题目名称 1485. [UVa 1482] 取石子游戏
输入输出 stones.in/out
难度等级 ★★
时间限制 1000 ms (1 s)
内存限制 256 MiB
测试数据 10
题目来源 Gravatarcstdio 于2014-01-13加入
开放分组 全部用户
提交状态
分类标签
UVa 博弈论
分享题解
通过:43, 提交:70, 通过率:61.43%
GravatarHzoi_Ivan 100 0.000 s 0.00 MiB C++
Gravatarcb 100 0.000 s 0.00 MiB C++
Gravatarztx 100 0.005 s 0.29 MiB C++
GravatarTyphon 100 0.005 s 0.32 MiB C++
Gravatar0 100 0.006 s 0.29 MiB C++
GravatarCooook 100 0.006 s 0.31 MiB C++
GravatarHzoi_Ivan 100 0.006 s 0.31 MiB C++
Gravatarwho! 100 0.007 s 0.29 MiB C++
Gravatarnew ioer 100 0.007 s 0.29 MiB C++
GravatarFoolMike 100 0.007 s 0.29 MiB C++
关于 取石子游戏 的近10条评论(全部评论)
著名SG游戏定理,完美秒杀所有组合游戏问题
Gravatar雪狼
2014-01-22 09:48 2楼
神の小学生技能:找规律……
Gravatarcstdio
2014-01-14 13:13 1楼

1485. [UVa 1482] 取石子游戏

★★   输入文件:stones.in   输出文件:stones.out   简单对比
时间限制:1 s   内存限制:256 MiB

【题目描述】

你和小伙伴在玩一个游戏,这个游戏是轮流从若干堆中拿石子。最初有 $N$ 堆石子,每堆石子的个数是 $a_1,a_2,...,a_N$。每个回合,轮到的玩家必须从某堆石子中拿出至少一个石子,但拿的石子数不能超过这一堆石子数的一半。不能拿石子的玩家就输了。例如,有三堆石子,每堆分别有 $5,1,2$ 个,那么玩家可以从第一堆中拿走 $1$ 或 $2$ 个石子,不能从第二堆中拿石子,可以从第三堆中拿走 $1$ 个石子。注意,玩家不能从第二堆中拿石子的原因是 $1$ 比 $1$(该堆石子数量)的一半大。假定你先拿,并且你的朋友总是执行最佳策略,判断你是否有必胜策略。

【输入格式】

输入包含多组数据。

输入文件的第 $1$ 行有一个正整数 $T(1<=T<=100)$,表示数据组数。

接下来是 $T$ 组数据。

每组数据的第 $1$ 行有一个正整数 $N(1<=N<=100)$,表示堆数。

每组数据的第 $2$ 行有 $N$ 个正整数 $a_1,a_2,...,a_N(1<=a_i<=2*10^{18})$,表示每堆的石子数。

【输出格式】

对每组数据,若你有必胜策略则输出一行"YES",否则输出一行"NO"(均不带引号)。

【样例输入】

4
2
4 4
3
1 2 3
3
2 4 6
3
1 2 1

【样例输出】

NO
YES
NO
YES

【来源】

UVa 1482 Playing With Stones

刘汝佳,《算法竞赛入门经典训练指南》表2.6