社区讨论
三分70求助
P2571[SCOI2010] 传送带参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lo13prbg
- 此快照首次捕获于
- 2023/10/22 14:42 2 年前
- 此快照最后确认于
- 2023/11/02 14:13 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
const double eps=1e-8;
double dis(double x,double y,double x1,double y1)
{
return sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));
}
double xa,ya,xb,yb,xc,yc,xd,yd,p,q,r;
double s(double x,double y)
{
if(xc==xd&&yc==yd) return dis(x,y,xd,yd)/r;
double lx=xc,ly=yc,rx=xd,ry=yd;
while(dis(lx,ly,rx,ry)>eps)
{
double lmidx=lx+(rx-lx)/3,lmidy=ly+(ry-ly)/3,rmidx=rx-(rx-lx)/3,rmidy=ry-(ry-ly)/3;
double ansl=dis(x,y,lmidx,lmidy)/r+dis(lmidx,lmidy,xd,yd)/q,ansr=dis(x,y,rmidx,rmidy)/r+dis(rmidx,rmidy,xd,yd)/q;
if(ansl-ansr>eps) lx=lmidx,ly=lmidy;
else rx=rmidx,ry=rmidy;
}
return dis(x,y,lx,ly)/r+dis(lx,ly,xd,yd)/q;
}
int main()
{
cin>>xa>>ya>>xb>>yb>>xc>>yc>>xd>>yd>>p>>q>>r;
double lx=xa,ly=ya,rx=xb,ry=yb;
do
{
if(xa==xb&&ya==yb)
{
lx=xa,ly=ya;
break;
}
double lmidx=lx+(rx-lx)/3,lmidy=ly+(ry-ly)/3,rmidx=rx-(rx-lx)/3,rmidy=ry-(ry-ly)/3;
double ansl,ansr;
ansl=s(lmidx,lmidy)+dis(xa,ya,lx,ly)/p,ansr=s(rmidx,rmidy)+dis(xa,ya,rx,ry)/p;
if(ansl-ansr>eps) lx=lmidx,ly=lmidy;
else rx=rmidx,ry=rmidy;
}while(dis(lx,ly,rx,ry)>eps);
printf("%.2lf\n",dis(xa,ya,lx,ly)/p+s(lx,ly));
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...