吃糖果
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 37222 Accepted Submission(s): 10666
2 3 4 1 1 5 5 4 3 2 1
No Yes
此题关键是怎么确定什么时候输出yes什么时候输出no
数学中有种思想叫插空法
可以先找出最多的那种糖果有几个,再把剩下的求和
对除最大值之外的值得和对最大值进行插空
最大值max有max-1个空,要想输出yes
剩下值的和sum就应该大于或等于max-1,即max-sum<=1
否则输出no
#include<stdio.h> long long a[1000001]; //定义全局变量,防止数组过大,溢出报错 int main() { long long T,i; scanf("%I64d",&T); for(i=1;i<=T;i++) { long long n,j,sum=0; long long max=-111; scanf("%I64d",&n); for(j=0;j<n;j++) { scanf("%I64d",&a[i]); sum+=a[i]; if(a[i]>max) //输入,求和,找最大值,在一个循环里可以完成 max=a[i]; } sum-=max; //sum为出最大值之外的所有值的和 if(max-sum<=1) //这个地方是关键 { printf("Yes\n"); } else { printf("No\n"); } } return 0; }