首页 > 其他 > 详细

HDU 3400

时间:2015-02-05 11:11:36      阅读:239      评论:0      收藏:0      [点我收藏+]

果然是你存我我深深的脑海里,思路有了,调了那么久,进水了。。。

三分一边后,嵌套三分另一边。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
const double eps=1e-6;

struct Point{
	double x,y;
};

Point a,b,c,d;
double p,q,rr;

double how(Point dont,Point dot){
	double ans1=sqrt((dot.x-d.x)*(dot.x-d.x)+(dot.y-d.y)*(dot.y-d.y))/q	;
	double ans2=sqrt((dont.x-dot.x)*(dont.x-dot.x)+(dont.y-dot.y)*(dont.y-dot.y))/rr;
	return ans1+ans2;
}

double cal(Point dont){
	Point l,r,m,mm;
	l=c,r=d;
	while(sqrt((l.x-r.x)*(l.x-r.x)+(l.y-r.y)*(l.y-r.y))>=eps){
			m.x=(l.x+r.x)/2;
			m.y=(l.y+r.y)/2;
			mm.x=(m.x+r.x)/2;
			mm.y=(m.y+r.y)/2;
		if(how(dont,m)>how(dont,mm))
		l=m;
		else r=mm;
	}
	double lt=sqrt((dont.x-a.x)*(dont.x-a.x)+(dont.y-a.y)*(dont.y-a.y))/p;
	return how(dont,l)+lt;
}

int main(){
	int T;
	scanf("%d",&T);
	while(T--){
		scanf("%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y);
		scanf("%lf%lf%lf%lf",&c.x,&c.y,&d.x,&d.y);
		scanf("%lf%lf%lf",&p,&q,&rr);
		Point l,r,m,mm;
		l=a; r=b;
		while(sqrt((l.x-r.x)*(l.x-r.x)+(l.y-r.y)*(l.y-r.y))>=eps){
			m.x=(l.x+r.x)/2;
			m.y=(l.y+r.y)/2;
			mm.x=(m.x+r.x)/2;
			mm.y=(m.y+r.y)/2;
			if(cal(m)>cal(mm))
			l=m;
			else r=mm;
		}
		printf("%.2lf\n",cal(l));
	}
	return 0;
}

  

HDU 3400

原文:http://www.cnblogs.com/jie-dcai/p/4274069.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!