(每日一练72243)题目名称:取石子

文盲老顾
新星创作者: 信息安全技术领域
领域专家: 数据库技术领域
2023-06-08 10:14:42

将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')
...全文
235 1 打赏 收藏 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
文盲老顾 2023-06-15
  • 打赏
  • 举报
回复

又看到一个 c++ 解答,稍后抄过来学习下。https://blog.csdn.net/Zygood_/article/details/130881590?spm=1001.2014.3001.5502

源码直接下载地址: https://pan.quark.cn/s/854bd57df23a 在金融行业中,房产购置贷款是众多人在购置不动产时必须进行的一项财务规划。Matlab作为一种功能强大的数学及数据分析平台,经常被应用于各类复杂的运算,其中包括住房贷款的计算。本文将详细研究运用Matlab开发住房贷款计算程序的相关知识要点,以协助读者掌握如何借助编程技术处理实际的信贷问题。 1. **信贷种类** - **商业信贷**:此类贷款通常由金融机构提供,其利率会随市场行情变化,借款人可选用固定利率或浮动利率方案。 - **公积金信贷**:该类贷款获得政府机构的支持,利率一般低于商业信贷,但设有最高贷款金额的限制。 2. **偿付模式** - **等额本金偿付**:每月支付相同数量的本金,利息部分逐月减少,因此整体还款总额会逐步降低。 - **等额本息偿付**:每月支付固定金额的本金与利息组合,利息部分随本金的逐月减少而递减。 3. **住房贷款计算公式** - **等额本息偿付**:每月还款额=贷款本金×[月利率×(1+月利率)^(贷款期数)]÷[(1+月利率)^(贷款期数)-1]。 - **等额本金偿付**:每月应还本金=贷款总额/贷款期数,每月利息=(贷款余额-累计已还本金)×月利率。 4. **Matlab编程基础** - **变量设定**:在Matlab环境中,首要任务是设定贷款数额、年化利率、贷款时长等核心参数。 - **循环控制结构**:借助for循环来模拟每个还款周期的过程,进行本金与利息的计算。 - **函数构建**:将住房贷款的计算逻辑封装为函数,便于重复使用和测试不同条件下的结果。 5. **Matlab代码编写** - **等额本息函数实现**...

320

社区成员

发帖
与我相关
我的任务
社区描述
主要用于技术交流,包括但不限于 .net,mssql,js,css,python,算法,运维。也可以晒最新技术,美图,运动等。最后,如果有问题,可以提问,老顾能帮忙的会尽量帮忙哦。
前端sqlserverasp.net 技术论坛(原bbs) 北京·西城区
社区管理员
  • 文盲老顾
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧