【HDU】1205 吃糖果
2018-03-20 22:13
253 查看
[align=left]Problem Description[/align]HOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢将一样的糖果放在一起吃,喜欢先吃一种,下一次吃另一种,这样;可是Gardon不知道是否存在一种吃糖果的顺序使得他能把所有糖果都吃完?请你写个程序帮忙计算一下。[align=left]Input[/align]第一行有一个整数T,接下来T组数据,每组数据占2行,第一行是一个整数N(0<N<=1000000),第二行是N个数,表示N种糖果的数目Mi(0<Mi<=1000000)[align=left]Output[/align]对于每组数据,输出一行,包含一个"Yes"或者"No"。[align=left]Sample Input[/align]2
3
4 1 1
5
5 4 3 2 1[align=left]Sample Output[/align]No
Yes 这道题题意大概就是给你几种糖果,每个糖果有多少个,这些糖果可不可以每次吃的相邻的两个糖果都不是同一种。
这道题我想到的是插空的方法,类似于组合数学中鸽巢原理的几种形式中的一种。在网上查了一些别人的做法,基本也都是用鸽巢原理,大同小异。
什么是鸽巢原理呢?其实最初的原理就是有n+1只鸽子飞到n个笼子里,那么一定有一个笼子里面有2只。
在这里,其实就是另外一种表达形式。找到数量最多(max)的糖果代表鸽子,其他糖果的总数代表挡板。若想要两只鸽子不在一起,那么至少要有max-1个挡板。
代码:#include <stdio.h>
int main() {
int T;
long long N,n;
scanf("%d",&T);
while (T--) {
long long sum=0,max=-1;
scanf("%lld",&N);
while (N--) {
scanf("%lld",&n);
sum+=n;
if (n>max)
max=n;
}
if ((sum-max)>=(max-1))
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
相关文章推荐
- HDU 1205 吃糖果
- HDU 1205 吃糖果
- HDU1205 吃糖果
- HDU 1205 吃糖果
- HDU 1205 吃糖果
- HDU 1205:吃糖果
- HDU1205 吃糖果【水题】
- HDU 1205 吃糖果(鸽巢定理)
- Hdu 1205 吃糖果【思维题目】
- 【HDU - 1205】吃糖果(抽屉原理)
- hdu 1205 吃糖果
- hdu 1205 吃糖果(水)
- hdu 1205 吃糖果(数学:推理||数据结构:优先队列)
- HDU1205-吃糖果
- HDU 1205 吃糖果
- hdu 1205 吃糖果
- hdu-1205 吃糖果
- hdu 1205 吃糖果 抽屉原理
- hdu 1205 :吃糖果
- hdu 1205 吃糖果