zzulioj1146: 吃糖果

题目描述
吃糖果时有个特殊的癖好,不喜欢连续两次吃一样的糖果,喜欢先吃一颗A种类的糖果,下一次换一种口味,吃一颗B种类的糖果,请判断是否存在一种顺序使得其能把所有糖果都吃完

输入
第一行有一个整数T,接下来T组数据,每组数据占2行,第一行是一个整数N(0 < N <= 1000000),表示糖果的种类。第二行是N个数,表示每种糖果的数目Mi(0 < Mi <= 109)。

输出
对于每组数据,输出一行,包含一个"Yes"或者"No"。

样例输入 Copy
2
3
4 1 1
5
5 4 3 2 1
样例输出 Copy
No
Yes

代码

#include<stdio.h>
int main()
{
	int i,j,t,n,x,sum,max;
	scanf("%d",&t);   //输入t代表t组数据 
	for(i=0;i<t;i++)
	{
		sum=max=0;
		scanf("%d",&n);    
		for(j=0;j<n;j++)    //依次输入n个数据 
		{
			scanf("%d",&x);
			sum+=x;        //sum存所有数据之和,代表一共有多少糖 
			if(x>max)
				max=x;	    //max表示数量最多的一种糖 
		}	
		 //剩下的糖果总数sum-max大于最多的哪一种中间的空max-1,说明可以实现不重复排列
		if(max-1<=sum-max)     
			printf("Yes\n");
		else
			printf("No\n");
	}	
	return 0;
} 

说明
假设最多的那种糖先排好,那么它中间会有max-1个空需要别的种类糖果插进去,如果除去数量最多的哪一款糖果后剩下的糖果种类小于这max-1个空,则说明肯定会出现重复排列

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值