第四个无论如何都是WA,我试了一下题解中能够AC的程序,发现似乎有一些问题,
譬如笃行的题解中,有如下的代码:
double k=(l+r)/2,u=r-l;
double a=m;
if(u<0.0001) out(k);
这里第3行, r和l之差小于0.0001时输出k,k是r和l的中间数。可是k是不是就是最终解呢?其实k并没有得到验证。
再看另一个能够AC的题解:
cin>>n>>m>>k;
///////////////////////二分模板
l=0;r=10;//月利率可能大于1
while(r-l>=0.0001){//注意精度问题
double mid=(l+r)/2;
if(pd(mid))r=mid;
else l=mid;
}
///////////////////////
cout<<fixed<<setprecision(1)<<l*100;
同样的问题,为什么最终输出的是l而不是r? r是经过pd()函数验证过可用的,而l并不是,如果把输出的l改成r,则第四个数据变成WA,这题的数据又不公开,又无法手动验证正确性,但是我觉得大概率的可能第四个数据是错误的。