题目描述
吃糖果时有个特殊的癖好,不喜欢连续两次吃一样的糖果,喜欢先吃一颗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个空,则说明肯定会出现重复排列