题目名称 | 1485. [UVa 1482] 取石子游戏 |
---|---|
输入输出 | stones.in/out |
难度等级 | ★★ |
时间限制 | 1000 ms (1 s) |
内存限制 | 256 MiB |
测试数据 | 10 |
题目来源 | cstdio 于2014-01-13加入 |
开放分组 | 全部用户 |
提交状态 | |
分类标签 | |
分享题解 |
通过:43, 提交:70, 通过率:61.43% | ||||
Hzoi_Ivan | 100 | 0.000 s | 0.00 MiB | C++ |
cb | 100 | 0.000 s | 0.00 MiB | C++ |
ztx | 100 | 0.005 s | 0.29 MiB | C++ |
Typhon | 100 | 0.005 s | 0.32 MiB | C++ |
0 | 100 | 0.006 s | 0.29 MiB | C++ |
Cooook | 100 | 0.006 s | 0.31 MiB | C++ |
Hzoi_Ivan | 100 | 0.006 s | 0.31 MiB | C++ |
who! | 100 | 0.007 s | 0.29 MiB | C++ |
new ioer | 100 | 0.007 s | 0.29 MiB | C++ |
FoolMike | 100 | 0.007 s | 0.29 MiB | C++ |
关于 取石子游戏 的近10条评论(全部评论) | ||||
---|---|---|---|---|
著名SG游戏定理,完美秒杀所有组合游戏问题
| ||||
神の小学生技能:找规律……
|
你和小伙伴在玩一个游戏,这个游戏是轮流从若干堆中拿石子。最初有 $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
刘汝佳,《算法竞赛入门经典训练指南》表2.6