• ny589 糖果


    糖果

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:2
    描述
    topcoder工作室的PIAOYIi超级爱吃糖果,现在他拥有一大堆不同种类的糖果,他准备一口气把它们吃完,可是他有一个习惯,他不喜欢同一种类的糖果连着吃,他喜欢先吃一种,然后再吃另一种。可是PIAOYI不知道是否存在一种顺序能把这些糖果吃完,聪明的你可以帮助他吗?
    输入
    第一行有一个整数N,接下来有N组数据,第一行有一个整数M(0<M<1000000),第二行是M个数,表示M种糖果的数目Mi(0<Mi<1000000).
    输出
    对于每组数据,输出一行,包含一个“Yes”或者“No”。
    样例输入
    2
    3
    1 1 5
    5
    1 2 3 4 5
    样例输出
    No
    Yes

    这个已经AC

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

    下面的WA了

    一种错误的方法,因为应该先吃多的糖果 例如2 2 2 10 7按一下的程序 应该输出NO但其实是Yes

    因为先吃10和7,当7吃完时10还剩3个,再和2 2 2,倒着循环,正好可以

     1 #include<stdio.h>
     2 int main()
     3 {
     4 long long a[1000010];
     5 long long x,t,n,k,i,j;
     6 int m;
     7 scanf("%lld",&t);
     8 while(t--)
     9 {m=0;
    10 scanf("%lld",&n);
    11 for(i=0;i<n;i++)
    12 scanf("%lld",&a[i]);
    13 for(;;)
    14 {
    15 k=0;x=0;
    16 for(j=0;j<n;j++)
    17 {
    18 if(a[j]!=0)
    19 {
    20 a[j]=a[j]-1;
    21 k++;
    22 x=j;
    23 }
    24 }
    25 if(k==1||k==0)
    26 {
    27 if(a[x]==0)
    28 {m=1;break;}
    29 else
    30 {m=0;break;}
    31 }
    32 }
    33 if(m==1)
    34 printf("Yes\n");
    35 else printf("No\n");
    36 }
    37 return 0;
    38 }
  • 相关阅读:
    如何解决移动端滚动穿透问题
    如何在mac中通过命令行使用sublime
    正向代理和反向代理
    UTF8、UTF16、UTF16-LE、UTF16-BE、UTF32都是些什么?
    依赖的版本
    如何移除inline-block元素之间的空白
    如何用JavaScript重定向到另一个网页?
    [读书笔记] 高性能网站建设指南
    java使用jconsole查看java程序运行(jmx原理)
    oracle相关知识点
  • 原文地址:https://www.cnblogs.com/lovychen/p/3138045.html
Copyright © 2020-2023  润新知