题目链接:点击打开链接
解题思路:
本题其实不需要什么特别的算法,最大数目的糖果起着重要作用,因为要求每次吃的糖果不一样,当你吃某一种糖果时,不用管其它种类的糖果还剩几个,都可以拿最大数目的糖果来凑数,来完成两次吃不同种类的糖果的要求,因此只要把最大数目的糖果和其它种类糖果数目之和的值进行比较即可,但最大数目-其它之和大于1时,肯定不符合要求,输出No,否则输出Yes。
#include <iostream>
using namespace std;
int kind[1000005];
int main()
{
int t; //t组数据
int n; //n种类
cin>>t;
int i,j;
for(i=1;i<=t;i++)
{
cin>>n;
int max=0;//数目最多的糖果
for(j=0;j<n;j++)
{
cin>>kind[j];
if(max<kind[j])
max=kind[j];
}
long long sum=0;//要用long long ,不能用int,因为1000000 * 1000000超出int范围
for(j=0;j<n;j++)
{
if(kind[j]<max)
sum+=kind[j];
}
if(max-sum>1)
cout<<"No"<<endl;
else
cout<<"Yes"<<endl;
}
return 0;
}