列表

详情


NC20276. [SCOI2010]传送带

描述

在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段。两条传送带分别为线段AB和线段CD。lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R。现在lxhgww想从A点走到D点,他想知道最少需要走多长时间

输入描述

输入数据第一行是4个整数,表示A和B的坐标,分别为Ax,Ay,Bx,By 
第二行是4个整数,表示C和D的坐标,分别为Cx,Cy,Dx,Dy 
第三行是3个整数,分别是P,Q,R

输出描述

输出数据为一行,表示lxhgww从A点走到D点的最短时间,保留到小数点后2位

示例1

输入:

0 0 0 100
100 0 100 100
2 2 1

输出:

136.60

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++ 11.0.1) 解法, 执行用时: 3ms, 内存消耗: 504K, 提交时间: 2023-07-12 20:20:14

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int n=99;
double dis(double x1,double x2,double y1,double y2)
{
	return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
int main () 
{
	double ax,ay,bx,by,cx,cy,dx,dy,p,q,r;
	cin>>ax>>ay>>bx>>by>>cx>>cy>>dx>>dy>>p>>q>>r;
	double ans=1e9;
	for(int i=0;i<=n;i++)
	{
		double x=(bx-ax)*i/n+ax;
		double y=(by-ay)*i/n+ay;
		for(int j=0;j<=n;j++)
		{
			double xx=(dx-cx)*j/n+cx;
			double yy=(dy-cy)*j/n+cy;
            double t=dis(ax,x,ay,y)/p+dis(x,xx,y,yy)/r+dis(xx,dx,yy,dy)/q;
            ans=min(t,ans);
		}
		
	}
	printf("%.2lf",ans);
}

上一题