当前位置:   article > 正文

zzuli 20级第六次周赛 2730 问题 H: 嘟嘟的“糖果”游戏_zzuli嘟嘟的"糖果"游戏

zzuli嘟嘟的"糖果"游戏

题目描述

嘟嘟是个爱吃糖的小孩。某一天嘟嘟的糖果吃完了,他想要去糖果店买糖果,正好遇到糖果店店长正在搞活动。
活动内容是跟店长玩一个游戏,赢了的话就能免费拿到糖果大礼包了,这可是买不到的那种稀有糖果。嘟嘟顿时兴奋了起来。
游戏的内容是这样的,店长的桌子上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<<"可惜";
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
  

闽ICP备14008679号