洛谷 P4702 取石子

在这里插入图片描述
思路:首先明确,只要还有石子,那么一定能取
不妨设有两堆石子a1,a2,假设现在还有石子且无法取,那么有a1+a2≥0,a2<a1<0
①两不等式矛盾:两个负数相加必定不是非负数
②石子数不可能为负数
所以只要还有石子,就一定能取。问题就转换为两人轮流从一堆石子取一粒,谁先不能取谁输。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
# define loop i=1;i<=n;i++
int main()
{
	int n, i;
	cin >> n;
	ll a,ans=0;
	for (loop) {
		cin >> a;
		ans += a;
	}
	if (ans &1)cout << "Alice";/*n为奇数时,对应的二进制数最低位为1,n&1的结果就是1;
n为偶数时,相应的最低位为0,n & 1的结果就是0*/
	else cout << "Bob";
	return 0;
}
发布了99 篇原创文章 · 获赞 44 · 访问量 5535

猜你喜欢

转载自blog.csdn.net/weixin_44413191/article/details/102548382