蓝桥杯备考冲刺必刷题(Python) | 3865 Alice和Bob的爱恨情仇

学习Python从娃娃抓起!记录下蓝桥杯备考比赛学习过程中的题目,记录每一个瞬间。

附上汇总贴:蓝桥杯备考冲刺必刷题(Python) | 汇总-CSDN博客


【题目描述】
Bob和Alice最近在学习博弈论, 为了学以致用, 他们找来了一大堆的小饼干, 并通过博弈的方式来吃掉这些小饼干。他们将找来的小饼干分成 n n n堆,每堆小饼干有 a i a_i ai个小饼干。他们轮流对这些饼干进行操作,操作规则如下:

  • 由Alice先手, 每次从一堆小饼干中拿出 k m k^m km个小饼干( k k k为奇数且 m ≥ 0 m\ge 0 m0,且 k m k^m km不能超出该堆小饼干的总数)。
  • 当一方进行完操作后,如果已经没有剩余的小饼干,则该方获胜,赢得所有的小饼干。

Alice和Bob都想赢得所有的小饼干, 所以都会以最佳方法来取小饼干, 请问他们之中谁能赢得所有的小饼干?
【输入】
第一行,输入两个正整数 n ( 1 ≤ n ≤ 2 × 1 0 6 ) , k ( 1 ≤ k ≤ 1 0 9 ) n(1\le n\le 2\times 10^6),k(1\le k\le 10^9) n(1n2×106),k(1k109),分别表示饼干的堆数和每次取出饼干的底数。
第二行,输入 n n n个整数,表示第i堆小饼干有 a i ( 1 ≤ a i ≤ 1 0 6 ) a_i(1\le a_i\le 10^6) ai(1ai106)个小饼干。
【输出】
输出一行,包含一个字符串,输出Alice和Bob之中获胜的那个人。
【输入样例】

2 3  
4 1

【输出样例】

Alice

【代码详解】
[图片]

n, k = [int(i) for i in input().split()]  # 输入n和k
a = [int(i) for i in input().split()]  # 输入n堆饼干
ans = 0
for i in range(n):  # 遍历n堆小饼干
    if a[i]%2==1:  # 如果某个小饼干是奇数个,则需要奇数次才能取完,偶数的个话,需要偶数次才能取完
        ans += 1
if ans%2==1:  # 如果是取奇数次,Alice赢
    print("Alice")
else:  # 如果是取偶数次,Bob赢
    print("Bob")

【运行结果】

2 3  
4 1
Alice
  • 27
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值