hdu 1205 吃糖果 (抽屉原理<鸽笼原理>)
吃糖果
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 47659 Accepted Submission(s): 13626
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 47659 Accepted Submission(s): 13626
Problem Description
HOHO,终于从Speakless手上赢走了所有的糖果,是Gardon吃糖果时有个特殊的癖好,就是不喜欢将一样的糖果放在一起吃,喜欢先吃一种,下一次吃另一种,这样;可是Gardon不知道是否存在一种吃糖果的顺序使得他能把所有糖果都吃完?请你写个程序帮忙计算一下。
Input
第一行有一个整数T,接下来T组数据,每组数据占2行,第一行是一个整数N(0<N<=1000000),第二行是N个数,表示N种糖果的数目Mi(0<Mi<=1000000)。
第一行有一个整数T,接下来T组数据,每组数据占2行,第一行是一个整数N(0<N<=1000000),第二行是N个数,表示N种糖果的数目Mi(0<Mi<=1000000)。
Output
对于每组数据,输出一行,包含一个"Yes"或者"No"。
对于每组数据,输出一行,包含一个"Yes"或者"No"。
Sample Input
2
3
4 1 1
5
5 4 3 2 1
2
3
4 1 1
5
5 4 3 2 1
Sample Output
No
Yes
No
Yes
Hint
Hint
Please use function scanf
Hint
Please use function scanf
C/C++:
1 #include <map> 2 #include <queue> 3 #include <cmath> 4 #include <vector> 5 #include <string> 6 #include <cstdio> 7 #include <cstring> 8 #include <climits> 9 #include <iostream> 10 #include <algorithm> 11 #define INF 0x3f3f3f3f 12 #define LL long long 13 using namespace std; 14 const int MAX = 1e6 + 10; 15 16 LL t, n, num[MAX], sum; 17 18 int main() 19 { 20 scanf("%d", &t); 21 while (t --) 22 { 23 scanf("%lld", &n); 24 sum = 0; 25 for (LL i = 0; i < n; ++ i) 26 { 27 scanf("%lld", &num[i]); 28 sum += num[i]; 29 } 30 sort(num, num + n); 31 sum -= num[n - 1]; 32 if (sum + 1 >= num[n - 1]) 33 printf("Yes\n"); 34 else 35 printf("No\n"); 36 } 37 return 0; 38 }