HDOJ 1005:吃糖果

问题描述:

代码:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #include <cstdio>  
  2. int main()  
  3. {  
  4.     int T, n, temp,max;  
  5.     long long sum;  
  6.     scanf("%d", &T);  
  7.     while (T--)  
  8.     {  
  9.         temp = sum = max=0;  
  10.         scanf("%d", &n);  
  11.         while (n--)  
  12.         {  
  13.             scanf("%d", &temp);  
  14.             if (max < temp)  
  15.                 max = temp;  
  16.             sum += temp;  
  17.         }  
  18.         if (sum - max >= max - 1)  
  19.             printf("Yes\n");  
  20.         else  
  21.             printf("No\n");  
  22.     }  
  23.     return 0;  
  24. }  


知识点总结:

自己写的总是时间超限,求解释啊~~~

学习心得:

今天做OJ题心塞塞的❤❤❤

—————————————————————————————————————————————————————————

                     以上是寒假做过的这道题,当时无论怎么做都是时间超限,后来迫不得已查了度娘,不过发现是用的C语言就没有太注意过程,

今天又看到这道题,还是使用的C++,不过运行之后显示答案错误……我就非常不解了……不就是C语言和C++的区别吗?为什么会答案错误……求解释!!!!!!

 

#include <iostream>
using namespace std;
int main()
{
    int n,maxl,p,m;
    long long s;
    cin>>n;
    while(n--)
    {
        maxl=0;
        s=0;
        cin>>m;
        while(m--)
        {
            cin>>p;
            if(maxl<=p)
                maxl=p;
            s=s+p;
        }
        if(s-maxl>=maxl-1)
            cout<<"yes"<<endl;
        else
            cout<<"no"<<endl;
    }
    return 0;
}

知识点总结:

思路就是,先找出数量最多的一种糖果的数量,剩下的相加之后看是否大于等于数量最多的糖果的数量减一,就类似于数学排列组合中的插空……如果符合条件输出yes,否则输出no

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值