hdu 1205 吃糖果

因为某场比赛某位同学打表没有打对,而且因为在上一场训练赛中被写进了题目里,他悲痛欲绝,不光在群里把昵称改成了不会打表且没有去过九里校区的xxxxx,而且希望通过吃糖来缓解自己的压力。他非常挑食,从来不连续吃两颗相同的糖。他有N种糖可以选择,希望你帮他计算是否能一次性吃完所有的糖。如果可以请输出Yes,否则输出No 
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            Please use function scanf

我的思路:最多的那一种糖果数如果大于剩下的糖果数那么一定没法吃完,那不过不大于呢,剩下的有需要就都可以找最大的那一组拿

鸽巢原理:
把多于n+1个的物体放到n个抽屉里,则至少有一个抽屉里的东西不少于两件。 //但我感觉我没有用到

#include<stdio.h>
#include<stdlib.h>
int main(){
	int t;
scanf("%d",&t);
while(t--){
		int n;
		scanf("%d",&n);//糖的种类数 
	int *sweet=(int *)malloc(1*sizeof(int));
	long long sum=0;//每个糖果都不是大数但和在一起就是了,流泪
	int max=0;//一定要给max赋初始值不然就是错的,因为第一输入的时候就要比较 
	for(int i=0; i<n; i++){
		scanf("%d",&sweet[0]);
		
		sum +=sweet[0];
		
		max = (max<sweet[0])?sweet[0]: max;
	}
	printf("%s\n",(max > sum - max + 1) ? "No" : "Yes");//若是最多的比剩下的多则否 
	free(sweet); 
}
	
	return 0;
} 
发布了65 篇原创文章 · 获赞 3 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览