我正在做此比赛的题,在这题中,我的核心代码如下:
ll a,b,l,r,m1,m2;
#define LD double
LD f(ll x)
{
return (LD)a/sqrt(x+1)+(LD)b*x;
}
void Solve()
{
cin>>a>>b;
cout<<fixed<<setprecision(10);
l=0,r=a/b;
while(r-l>=5)
{
//cout<<l<<" "<<r<<endl;
m1=(l*2+r)/3;m2=(l+r*2)/3;
//cout<<m1<<" "<<m2<<" "<<f(m1)<<" "<<f(m2)<<endl;
if(f(m1)>f(m2))l=m1;else r=m2;
}
LD ans=a;
for(ll i=l;i<=r;i++)ans=min(ans,f(i));
cout<<ans;
}
它 AC 了。
然后,我把 #define LD double 改成了 #define LD long double。
它 WA 了。
我把我的程序与官方题解对拍。
tj:l=29240177199 r=29240177821
m1=29240177406 m2=29240177613
f(m1)=8772053214538.5976562500 f(m2)=8772053214538.5976562500
我的(long double):l=29240177199 r=29240177613
m1=29240177337 m2=29240177475
f(m1)=8772053214538.5983052254 f(m2)=8772053214538.5981745720
所以是我的问题,还是题目的问题,还是 long double 的问题?