1.练习项目:
问题描述
Bob 和 Alice 最近在学习博弈论,为了学以致用,他们找来了一大堆的小饼干,并通过博弈的方式来吃掉这些小饼干。他们将找来的小饼干分成 𝑛 堆,每堆小饼干有 𝑎𝑖 个小饼干。他们轮流对这些饼干进行操作,操作规则如下:
• 由 Alice 先手,每次从一堆小饼干中拿出 𝑘的𝑚次方 个小饼干( 𝑘 为奇数且 𝑚≥0,且 𝑘的𝑚次方 不能超出该堆小饼干的总数)。
• 当一方进行完操作后,如果已经没有剩余的小饼干,则该方获胜,赢得所有的小饼干。
Alice 和 Bob 都想赢得所有的小饼干,所以都会以最佳方法来取小饼干,请问他们之中谁能赢得所有的小饼干?
输入格式
第一行,输入两个正整数 𝑛(1≤𝑛≤2×106) , 𝑘(1≤𝑘≤109) ,分别表示饼干的堆数和每次取出饼干的底数。 第二行,输入 𝑛 个整数,表示第 𝑖 堆小饼干有 𝑎𝑖(1≤𝑎𝑖≤106) 个小饼干。
输出格式
输出一行,包含一个字符串,输出 Alice 和 Bob 之中获胜的那个人。
2.选择课程
在蓝桥云课中选择课程《16届蓝桥杯省赛无忧班(C&C++ 组)4期》,选择第二章“基础算法”编程19并开始练习。
3.开始练习
(1)源码:
#include<bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n, k, cnt = 0;
cin >> n >> k;
// 统计奇数堆的数量
for (int i = 0; i < n; i++) {
int a;
cin >> a;
if (a % 2) cnt++;
}
// 判断奇数堆数量的奇偶性
cout << (cnt % 2 ? "Alice" : "Bob") << '\n';
return 0;
}
(2)检验结果
对此代码进行检验,检验后无报错,提交此代码,判题结果为正确100分。
(3)练习心得:注意每段代码末尾的分号是否存在,如不存在则需即使补充;输入法是否切换为英语模式;语法是否错误。