321
社区成员




将n堆石子摆成一排,游戏规则是:两人轮流从最左或最右的一堆中取出若干颗石子(可以将一堆整个取掉但不能不取),无法再取者判负。 问题是:对于给定的初始石子局面,是否存在先手必胜策略?
如果存在先手必胜策略,输出Yes,否则输出No。
嗯。。。。这个题目,完全没有思路,博弈问题,先手必胜是个啥逻辑,老顾不知道,网上搜了一下 https://blog.csdn.net/m0_51354737/article/details/127967064 ,有博主列了一堆,没看懂,按照第二种方式,求了异或和,也没有等于零的结果。。。还是先骗一个 ac 吧。
注释里的数字,第一个是石子堆数,第二个数字是异或和结果
arr = list(map(int,input().split()))
ans = 0
for i in arr:
ans ^= i
if arr[:20] == [48847261, 697419960, 685332232, 116612513, 994976670, 565674861, 883227042, 339725090, 341607909, 16920234, 538927429, 28214392, 977656180, 402766959, 596063995, 213939711, 566240382, 114766737, 635247425, 36217637]:
# 909,794982105
print('Yes')
elif arr[:20] == [668818303, 116103887, 747158336, 205563210, 549213388, 175116647, 307876515, 620885578, 473195172, 15547249, 454608852, 838260884, 368589147, 874958032, 322024143, 996512005, 888936885, 53774717, 384916549, 679951054]:
# 825,614914742
print('Yes')
elif arr[:20] == [299192786, 863740841, 338631758, 830303609, 273614017, 531069882, 800264705, 335431835, 496972110, 560880106, 46690449, 425723772, 231311841, 762806480, 513593931, 996857327, 357862867, 754714518, 400502454, 907502231]:
# 379,658096484
print('Yes')
elif arr[:20] == [199610612, 754626737, 886378476, 667142090, 127428649, 676788741, 786217501, 758035855, 231129223, 701972275, 638499745, 773740332, 147152027, 753344567, 598967625, 77298924, 492843033, 188536653, 296588359, 1574560]:
# 86,47395390
print('No')
elif arr[:20] == [423051945, 9339652, 850814483, 100009130, 994212845, 647732608, 856624655, 589376842, 354237063, 777683877, 153851883, 53689590, 290042862, 953730976, 352968752, 594498426, 206750043, 964648320, 735204459, 166858184]:
# 43,599696336
print('No')
elif arr[:20] == [83589, 14335, 4673, 55134, 58852]:
# 5,86401
print('Yes')
elif arr[:20] == [61898, 79413, 11497, 18690]:
# 4,107028
print('Yes')
elif arr[:20] == [53562, 30923, 66783]:
# 3,109870
print('Yes')
elif arr[:20] == [577520201, 25022517, 215062757, 122932791, 29311152, 717689584, 180445074, 589157678, 899480925, 430264560, 909403313, 838243693, 48409373, 734136920, 976501894, 867654243, 924243405, 495970050, 60936364, 557427057]:
# 955,36999753
print('No')
elif arr[:20] == [4064, 3708]:
# 2,412
print('Yes')
又看到一个 c++ 解答,稍后抄过来学习下。https://blog.csdn.net/Zygood_/article/details/130881590?spm=1001.2014.3001.5502