hdu 4525 我要吐槽版

已记不清wa了多少次之后猛然ac了。ctrl+z返回到之前,ctrl+shift+z在退回来。我只想说尼玛,我还是不知道。

接下来我要把我的神奇经历记录一下。

View Code
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>

using namespace std;

double n,k1,k2,k;

int main()
{
    int t;
    scanf("%d",&t);
    for(int tt=1;tt<=t;tt++)
    {
        scanf("%lf %lf %lf %lf",&n,&k1,&k2,&k);
        double ans=0;
        for(int i=1;i<=n;i++)
        {
            double tmp=0;
            scanf("%lf",&tmp);
            ans+=tmp;
        }
        if(ans>k)
            printf("Case #%d: %d\n",tt,0);
        else if((k1+k2<=0&&k1+k2>=-1)||(n==1&&k1>=-1&&k1<=0))
            printf("Case #%d: %s\n",tt,"inf");
        else
        {
            double cnt=0;
            while(ans<=k)
            {
                ans=(k1+k2)*ans;
                cnt++;
            }
            printf("Case #%d: %.0lf\n",tt,cnt);
        }
    }
    return 0;
}

上述代码中以前的ll全部换成了double,容我慢慢道来。

if(ans>k)
    printf("Case #%d: %d\n",tt,0);
else if((k1+k2<=0&&k1+k2>=-1)||(n==1&&k1>=-1&&k1<=0))
    printf("Case #%d: %s\n",tt,"inf")

如果我没记错的话,昨晚管理员是说不会有0这项输出的吧。可是我把ac过的代码拿回来注释掉那行重新提交竟然wa了,尼玛,到底有没有,你个傻×。再者,就算有0这项输出,如果我把下面的那个else if里面的内容换一下,换成下面这样:

else if((k1+k2<=1&&k1+k2>=-1)||(n==1&&k1>=-1&&k1<=1))
    printf("Case #%d: %s\n",tt,"inf");

当然,你猜对了,还是wa。难道换成这样有错么?系数和是大于0小于1的小数,乘以一个数不是越乘越小么,我智商有限,抑或我脑袋短路。因为上面的那个if已经把初始值考虑了呀有木有。。如果初始值最大的时候都不大于k,那还指望他以后出现大于k的情况,你以为是一千零一夜啊,尼玛。还有,如果我没有记错的话,昨晚管理员说里面的数据都是整数,别的数我不管,我来说说k1,k2。如果我把else if换成下面这样,会怎样。。

else if((k1+k2==0||k1+k2==-1||k1+k2==1)||(n==1&&(k1==-1||k1==0||k1==1)))
    printf("Case #%d: %s\n",tt,"inf");

好坏啦,银家不玩啦,又让您猜对了。结果还是wa呀有木有。。

所以我便开始神经质的把ll换成了double。

有时候真的觉得,wa是必然,ac是奇迹。上面各种都是我今天一一尝试过的,如若不是,欢迎诸位板砖相迎。

posted on 2013-03-26 11:24  Raining Days  阅读(198)  评论(0编辑  收藏  举报

导航