1407: 最短距离

Description

两个点 A , B 均在做匀速直线运动。给出 t = 0时刻 A , B 的坐标,以及 A , B 的速度,计算 t 0时两个点的距离的最小值。

Input

输入的第一行包含一个整数 T (1 T 200 ),表示一共有 T 组测试数据。
对于每组测试数据,第一行包含4个整数 x A , y A , v Ax , v Ay (-10 3 x A , y A , v Ax , v Ay 10 3 ),表示 t = 0时刻 A 的坐标为( x A , y A ), A 的速度在 x 轴方向上的分量为 v Ax ,在 y 轴上的分量为 v Ay 。第二行包含四个整数 x B , y B , v Bx , v By (-10 3 x B , y B , v Bx , v By 10 3 ),以相同的方式给出了 B 的各项属性。

Output

对于每组测试数据,输出 t 0时两个点距离的最小值,保留8位小数。

Sample Input

6
0 0 0 0
0 1 0 1
0 0 -1 1
0 0 1 -1
0 1 1 0
2 0 0 1
0 1 1 0
2 0 1 0
0 0 -1 1
1 1 1 -1
997 997 -1000 -1000
-1000 -1000 1000 1000

Sample Output

1.00000000
0.00000000
0.70710678
2.23606798
1.41421356
0.00000000

HINT

Source

中南大学第八届大学生程序设计竞赛


题意:求两点的最短距离;可以根据时间 t 将距离方程列出,求出二元一次方程的 a,b,c;

1.如果a=0;即A,B两点的速度都是相等的;那么就把最开始时刻的距离输出;

2.如果a!=0;求出抛物线的顶点的值,(-b/2a , -b/4a+c);然后与初始时刻的点的距离比较,输出较小的;


# include <iostream> 
# include <cstdio> 
# include <cmath> 
using namespace std; 
  
#define maxn 0xfffffff 
  
int main() 
{ 
    //freopen("a.txt","r",stdin); 
    int t; 
    scanf("%d",&t); 
    while(t--) 
    { 
        int ax,ay,bx,by,vax,vay,vbx,vby; 
        double a,b,c,s,ans; 
        ans=maxn; 
        scanf("%d%d%d%d",&ax,&ay,&vax,&vay); 
        scanf("%d%d%d%d",&bx,&by,&vbx,&vby); 
        a=(vax-vbx)*(vax-vbx)+(vay-vby)*(vay-vby); 
        b=2*((vax-vbx)*(ax-bx)+(vay-vby)*(ay-by)); 
        c=(ax-bx)*(ax-bx)+(ay-by)*(ay-by); 
        if(a==0)    printf("%.8lf\n",sqrt(c)); 
        else
        { 
            s=-b/a/2; 
            if(s>0)    ans=(4*a*c-b*b)/a/4; 
            ans=sqrt(ans); 
            c=sqrt(c); 
            printf("%.8lf\n",ans>c ? c:ans); 
        } 
    } 
    return 0; 
}


c++:题目描述 王老师是一名喜欢研究代码、也喜欢看漫画书的老师,某天敲完代码之后,王老师准备打开刚从某宝买来的《林木书》放松一下。 刚翻开书,书页上的画面开始旋转,深深吸引(物理)住了王老师。等王老师从眩晕中醒来,发现自己被吸入到了书中的世界 —— 一片被黑域侵染,目光所及之处全是枯朽之木的世界。 “你是拯救这个世界的勇者,请前去清除黑域的影响吧,令林中之木复苏,让世界重现生机……” 书中的世界可以看成一个巨大的平面直角坐标系,其中存在 n 棵受到侵染而枯萎的树木。这些树木有从1 到 n 的编号,且第 i 棵树木的坐标定义为(x i ​ ,y i ​ )。 由于黑域的影响,王老师只有按照平行于 x 轴或 y 轴方向行走才是安全的,因此两棵树木之间的最短路程,例如树木 a 到树木 b 的最短路程可由 ∣x a ​ −x b ​ ∣+∣y a ​ −y b ​ ∣ 求得。 (∣x a ​ −x b ​ ∣ 表示为取绝对值)。 在世界中有 m 处的树木存在”指引“,王老师可以在任何时间地点不花费任何代价,直接传送至任意一棵存在”指引“的树木的所在地点。 王老师来到这个世界时恰好在第 1 棵树木的所在位置,他需要按照树木编号的顺序去逐个净化并复苏枯萎的树木,在所有树木都被净化和复苏之后,黑域的影响将消失,王老师也会回到现实。 现在王老师想要知道,回到现实前至少要在书中世界走多远距离的路。 输入格式 第一行输入两个整数 n,m,分别表示世界中树木的总数目和存在”指引“的树木的数目。 随后 n 行,其中第i 行输入两个整数 x i ​ ,y i ​ ,表示编号为 i 的树木的坐标。 随后一行输入 m 个整数,表示存在”指引“的树木编号。 输出格式 输出一行一个整数表示最短距离。 样例输入 1 4 1 114 514 1919 810 3141 5926 3238 4626 4 样例输出 1 3498 提示/说明 样例 1 解释 王老师在净化第1棵树木后步行到第2棵树木处并净化,最短行走路程2101. 然后传送到第4棵树木处,再步行到第3棵树木处并净化,最短行走路程1407. 最后再次传送到第4棵树木处并净化,行走路程为0. 总行走路程为2101+1407+0=3498. 数据范围 对于20%的数据有 m=0。 对于40%的数据有 m=1。 对于60%的数据有n,m≤300。 对于100%的数据有1≤n≤5000,0≤m≤n,−10000≤x i ​ ,y i ​ ≤10000 数据保证没有任意两棵树木在同一坐标下,存在“指引”的树木编号不会重复。
07-19
我需要你找出最快的O(n)解法 P1252 马拉松接力赛 题目描述 某城市冬季举办环城 25 k m 25km 马拉松接力赛,每个代表队有 5 5 人参加比赛,比赛要求每个的每名参赛选手只能跑一次,一次至少跑 1 k m 1km 、最多只能跑 10 k m 10km,而且每个选手所跑的公里数必须为整数,即接力的地方在整公里处。 刘老师作为学校代表队的教练,精心选择了 5 5 名长跑能手,进行了训练和测试,得到了这 5 5 名选手尽力连续跑 1 k m 1km、 2 k m 2km、…、 10 k m 10km 的所用时间。现在他要进行一个合理的安排,让每个选手跑合适的公里数,使学校代表队跑完 25 k m 25km 所用的时间最短。根据队员的情况,这个最短的时间是惟一的,但安排方案可能并不惟一。 根据测试情况及一般运动员的情况得知,连续跑 1 k m 1km 要比连续跑 2 k m 2km 速度快,连续跑 2 k m 2km 又要比连续跑 3 k m 3km 速度快……也就是说连续跑的路程越长,速度越慢,当然也有特殊的,就是速度不会变慢,但是绝不可能变快。 输入格式 5 5 行数据,分别是 1 1 到 5 5 号队员的测试数据,每行的 10 10 个整数,表示某一个运动员尽力连续跑 1 k m 1km 、 2 k m 2km、…、 10 k m 10km 所用的时间。时间为一个不超过 10 7 10 7 的正整数。 输出格式 两行,第一行是最短的时间,第二行是五个数据,分别是 1 1 到 5 5 号队员各自连续跑的公里数。 输入输出样例 #1 输入 #1 333 700 1200 1710 2240 2770 3345 3956 4778 5899 300 610 960 1370 1800 2712 3734 4834 5998 7682 298 612 990 1540 2109 2896 3790 4747 5996 7654 289 577 890 1381 1976 2734 3876 5378 6890 9876 312 633 995 1407 1845 2634 3636 4812 5999 8123 输出 #1 9905 6 5 5 4 5 说明/提示 @Jomoo 提供了修正后的数据
最新发布
08-15
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值