HDU - 1205 吃糖果(鸽巢原理)

 

题目如下:

​​​​

方法:隔板法求解

找出数量最多的一种糖果,把数量n看成n个隔板,隔成n个空间(隔板以右为一空间),其他糖果数量总和记为数值s。

(1)若s<n-1,把s个糖果放到隔板之间,n个隔板不够放,至少一个空间内没有糖果,因为两个隔板为同一种糖果,不符合题意,无解。

(2)若s>=n-1​,有解。

推导之后发现:当总数-最大值>=最大值-1时,就满足有解条件。

注意事项:

(1)用数组存放时,数组要开大,n<=1000000,数组要a[1000000];

(2)把t,n等变量定义成long long类型(int类型的话为WA)。

 

AC代码:

 1 #include<stdio.h>
 2 int main()
 3 {
 4     long long t,n,sum,max;
 5     int a[1000000];
 6     scanf("%lld",&t);
 7     while(t--){
 8         scanf("%lld",&n);
 9         sum=0,max=0;
10         for(int j=0;j<n;j++){
11             scanf("%d",&a[j]);
12             sum+=a[j];
13             max=max<a[j]?a[j]:max;
14         }    
15         if((sum-max)>=(max-1)){
16             printf("Yes\n");
17         }
18         else{
19             printf("No\n");
20         }
21     }
22     return 0;
23 }

 

posted @ 2020-07-25 16:47  --cherry--  阅读(76)  评论(0)    收藏  举报