已记不清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是奇迹。上面各种都是我今天一一尝试过的,如若不是,欢迎诸位板砖相迎。