社区讨论

三分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 条回复,欢迎继续交流。

正在加载回复...