题目名称 | 1153. 取火柴游戏 |
---|---|
输入输出 | matchi.in/out |
难度等级 | ★ |
时间限制 | 1000 ms (1 s) |
内存限制 | 128 MiB |
测试数据 | 10 |
题目来源 | 王者自由 于2012-10-16加入 |
开放分组 | 全部用户 |
提交状态 | |
分类标签 | |
分享题解 |
通过:17, 提交:26, 通过率:65.38% | ||||
钨铅 | 100 | 0.000 s | 0.17 MiB | Pascal |
Zwoi_只会打表抄代码的蒟蒻 | 100 | 0.000 s | 0.31 MiB | C |
kilometer | 100 | 0.000 s | 0.33 MiB | C |
苏轼 | 100 | 0.000 s | 0.54 MiB | Pascal |
vector | 100 | 0.001 s | 0.31 MiB | C++ |
仲夏 | 100 | 0.001 s | 0.32 MiB | C++ |
zhengtn03 | 100 | 0.001 s | 0.35 MiB | C++ |
王者自由 | 100 | 0.001 s | 1.97 MiB | C++ |
longgod | 100 | 0.001 s | 2.22 MiB | C++ |
斯内普和骑士 | 100 | 0.001 s | 15.57 MiB | C++ |
关于 取火柴游戏 的近10条评论(全部评论) | ||||
---|---|---|---|---|
数据太弱了,建议管理员加强数据,刚才写了个错误的代码结果AC了……
longgod
2018-02-24 15:36
3楼
| ||||
如果把n个非负整数都化成二进制数,然后对n个二进制数按位相加(不进行进位),若每一位相加的结果都为偶数,则称这n个非负整数的状态为偶状态,否则称之为奇状态。可以证明:任何一个偶状态在某一个数变小后一定成为奇状态,而对任何一个奇状态,必定可以通过将某一个数的值变小,使得改变后的状态成为偶状态。
退役倒计时。。。 | ||||
nim?
钨铅
2013-08-17 10:06
1楼
|
【问题描述】
输入k及k个整数n1,n2,…,nk,表示有k堆火柴棒,第i堆火柴棒的根数为ni;接着便是你和计算机取火柴棒的对弈游戏。取的规则如下:每次可以从一堆中取走若干根火柴,也可以一堆全部取走,但不允许跨堆取,也不允许不取。
谁取走最后一根火柴为胜利者。k<=500000,0<=ni<=1000
例如:k=2,n1=n2=2,A代表你,P代表计算机,若决定A先取:
A:(2,2)→(1,2) {从一堆中取一根}
P:(1,2)→(1,1) {从另一堆中取一根}
A:(1,1)→(1,0)
P:(1,0)→ (0,0) {P胜利}
如果决定A后取:
P:(2,2)→(2,0)
A:(2,0)→ 0,0) {A胜利}
又如k=3,n1=1,n2=2,n3=3,A决定后取:
P:(1,2,3)→(0,2,3)
A:(0,2,3)→(0,2,2)
A已将游戏归结为(2,2)的情况,不管P如何取A都必胜。
编一个程序,在给出初始状态之后,判断是先取必胜还是先取必败,如果是先取必胜,请输
出第一次该如何取。如果是先取必败,则输出“lose”。
【样例1】
match.in match.out
3 4 3 {表示第一次从第3堆取4个出来,必胜}
3 6 9 3 6 5 {第一次取后的状态}
【样例2】
match.in match.out
4 lose {先取必败}
15 22 19 10