HOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢将一样的糖果放在一起吃,喜欢先吃一种,下一次吃另一种,这样;可是Gardon不知道是否存在一种吃糖果的顺序使得他能把所有糖果都吃完?请你写个程序帮忙计算一下。
2 3 4 1 1 5 5 4 3 2 1
No Yes
题解:先将各种糖果的数量排序,若除数量最大的一种糖果外其他糖果之和加1大于等于数量最大的那种糖果则满足情况。
#include<cstdio>
#include<algorithm>
using namespace std;
long long a[1000005];
int main()
{
long long t,n,i;
scanf("%lld",&t);
while(t--)
{
scanf("%lld",&n);
for(i=0;i<n;i++)
scanf("%lld",&a[i]);
sort(a,a+n);
long long sum=1;
if(n==1)
{
if(a[0]==1)
printf("Yes\n");
else
printf("No\n");
}
else
{
for(i=n-2;i>=0;i--)
{
sum+=a[i];
if(sum>=a[n-1])
break;
}
if(i<0)
printf("No\n");
else
printf("Yes\n");
}
}
return 0;
}