hdu1205吃糖果(鸽巢原理)
2016-03-22 22:52
197 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1205
鸽巢原理:25只鸽子飞进了24个鸽巢,则至少有一个鸽巢有两个鸽子。
这道题就是找出数量最大的那堆糖果,然后判断sum - max(代表总量 - 最大堆数量,也就是剩余糖果的数量) 是否大于 max - 1,如果大于的话,代表可以吃完.因为数量为max的糖果有max - 1 个空,其他种类小于max - 1的糖果,可以插在max - 1个空的任意空里面。
代码:
鸽巢原理:25只鸽子飞进了24个鸽巢,则至少有一个鸽巢有两个鸽子。
这道题就是找出数量最大的那堆糖果,然后判断sum - max(代表总量 - 最大堆数量,也就是剩余糖果的数量) 是否大于 max - 1,如果大于的话,代表可以吃完.因为数量为max的糖果有max - 1 个空,其他种类小于max - 1的糖果,可以插在max - 1个空的任意空里面。
代码:
#include <cstdio> int main() { long long int sum; int t,max; scanf("%d",&t); while(t--) { int n,m; max = -1; sum = 0; scanf("%d",&n); for(int i = 0;i < n;++i) { scanf("%d",&m); if(m > max) max = m; sum += m; } if(sum - max >= max - 1) printf("Yes\n"); else printf("No\n"); } return 0; }