题目描述
嘟嘟是个爱吃糖的小孩。某一天嘟嘟的糖果吃完了,他想要去糖果店买糖果,正好遇到糖果店店长正在搞活动。
活动内容是跟店长玩一个游戏,赢了的话就能免费拿到糖果大礼包了,这可是买不到的那种稀有糖果。嘟嘟顿时兴奋了起来。
游戏的内容是这样的,店长的桌子上n 种糖果,每种糖果 Xi ( 1 ≤ i ≤ n ) 个。玩家跟店长双方轮流吃糖,一次吃一颗,谁最后没糖可吃就输了。
但是店长又加了一个条件,就是如果对方上一次吃了第 i 种糖果,则己方此次就不能吃第 i 种糖果(如果是游戏开局第一个人则可以吃任意种类的糖果)。并且店长总是先手。
聪明的嘟嘟看了下店长桌子上放的糖果,他知道糖果店老板是一个极度聪明的人,但是又不想放弃糖果大礼包,陷入了纠结。请你告诉嘟嘟,他能否有绝对的把握拿到糖果大礼包。
输入
第一行输入一个整数n,代表糖果种类。 第二行输入n个整数Xi,代表第i种糖果数量。 (1 ≤ n ≤104, 1 ≤ Xi ≤ 104)
输出
如果嘟嘟能赢得游戏拿下糖果大礼包,则输出"必拿下!",否则输出"可惜"。(输出不带双引号)
样例输入
3
1 2 1
样例输出
必拿下!
博弈论,判断总数是奇偶,偶数必赢。根据题目中的规则还需判断n是否大于1,和里面的最大值是否小于于总数的一半。如果都符合则能赢。(感谢大佬指出错误)
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, a,ans = 0, maxn = 0;
cin>>n;
for(int i = 0; i < n; i++){
cin>>a;
maxn = max(maxn, a);
ans =ans +a;
}
if(ans % 2 == 0 && n > 1 && maxn <= ans / 2){
cout<<"必拿下!";
}else{
cout<<"可惜";
}
}