首页 > 代码库 > BZOJ 1857 传送带
BZOJ 1857 传送带
三分套三分。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define eps 1e-4 using namespace std; double x,y,v1,v2,v0; struct point { double x,y; point (double x,double y):x(x),y(y) {} point () {} }a,b,c,d; double dis(point x,point y) { return sqrt((x.x-y.x)*(x.x-y.x)+(x.y-y.y)*(x.y-y.y)); } double calc(point x) { point l=c,r=d,k1,k2; while (fabs(r.x-l.x)>eps || fabs(r.y-l.y)>eps) { k1=point(l.x+(r.x-l.x)/3,l.y+(r.y-l.y)/3); k2=point(l.x+(r.x-l.x)/3*2,l.y+(r.y-l.y)/3*2); if (dis(x,k1)/v0+dis(k1,d)/v2>dis(x,k2)/v0+dis(k2,d)/v2) l=k1;else r=k2; } return dis(x,l)/v0+dis(l,d)/v2; } int main() { scanf("%lf%lf",&x,&y);a=point(x,y); scanf("%lf%lf",&x,&y);b=point(x,y); scanf("%lf%lf",&x,&y);c=point(x,y); scanf("%lf%lf",&x,&y);d=point(x,y); scanf("%lf%lf%lf",&v1,&v2,&v0); point l=a,r=b,k1,k2; while (fabs(r.x-l.x)>eps || fabs(r.y-l.y)>eps) { k1=point(l.x+(r.x-l.x)/3,l.y+(r.y-l.y)/3); k2=point(l.x+(r.x-l.x)/3*2,l.y+(r.y-l.y)/3*2); if (calc(k1)+dis(a,k1)/v1>calc(k2)+dis(a,k2)/v1) l=k1;else r=k2; } printf("%.2lf\n",calc(l)+dis(a,l)/v1); return 0; }
BZOJ 1857 传送带
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。