HDU-1205(喫糖果)

喫糖果

Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 32022    Accepted Submission(s): 9106


Problem Description
HOHO,終於從Speakless手上贏走了所有的糖果,是Gardon喫糖果時有個特殊的癖好,就是不喜歡將一樣的糖果放在一起喫,喜歡先喫一種,下一次喫另一種,這樣;可是Gardon不知道是否存在一種喫糖果的順序使得他能把所有糖果都喫完?請你寫個程序幫忙計算一下。
 

Input
第一行有一個整數T,接下來T組數據,每組數據佔2行,第一行是一個整數N(0<N<=1000000),第二行是N個數,表示N種糖果的數目Mi(0<Mi<=1000000)。
 

Output
對於每組數據,輸出一行,包含一個"Yes"或者"No"。
 

Sample Input
2 3 4 1 1 5 5 4 3 2 1
 

Sample Output
No Yes
注:這題主要考思維。找到數量最大的糖m,然後讓其它種類的糖,能把數量最大的那種糖消耗掉就行。用的是數學中的插空。

其它種類的糖的數量和爲sum。只要滿足m-sum<=1即可,輸出Yes,否則輸出No.

思想與 

bzoj 2456 mode相似

My   solution:

/*2016.3.13*/

#include<stdio.h>
#include<algorithm>
using namespace std;
long long  x[1000080];
int main()
{
	int i,j,n,m,t;
	long long sum;
	scanf("%d",&t);
	while(t--)
	{
		sum=0;
		scanf("%d",&n);
		for(i=0;i<n;i++)
		scanf("%I64d",&x[i]);
		sort(x,x+n);
		for(i=0;i<n-1;i++)
		sum+=x[i];
		if((x[n-1]-sum)<=1)
		printf("Yes\n");
		else
		printf("No\n");
	}
	return 0;
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章