【zzulioj 1909: 小火山的友情距离】
发布日期:2021-11-04 12:59:29 浏览次数:7 分类:技术文章

本文共 3046 字,大约阅读时间需要 10 分钟。

1909: 小火山的友情距离

Description

小火山和他的朋友岩浆, 分别打算去买商店买一些东西。小火山的起始位置为(X1, Y1),终止位置为(X2, Y2), 速度为U;

岩浆的起始位置为(X3, Y3), 终止位置为(X4, Y4), 速度为V, 双方一块出发, 到达终止位置后, 都会在终止位置停留。 现在小火山想知道他和岩浆在此过程中的最小距离。
Input

输入第一行是一个整数T(T <= 100), 表示一共有T组数据。

对于每组数据都有十个数字X1, Y1,X2, Y2, U, X3, Y3, X4, Y4, V。 分别代表小火山和岩浆的起始位置, 终止位置和速度。
(|X1, Y1,X2, Y2, X3, Y3, X4, Y4| <= 1000000, 1 <= U, V <= 1000000)
Output

对于每组数据输出一个数字, 表示此过程中的最小距离, 最后结果保留四位小数。

Sample Input

2

1 0 2 2 5 0 0 -1 -1 4
0 0 2 0 3 1 1 2 1 2
Sample Output

1.0000

1.0000

一个裸 数学代数题~~以 T 为未知数,列出 (0~t1)t1 和(t1~t2)t1~t2两个段的函数,一个 关于 T 的二元一次 方程;

#include
#include
#include
using namespace std;double dis(double x1,double y1,double x2,double y2){ return sqrt(pow(x1 - x2,2) + pow(y1 - y2,2));}int main(){ int T; double c1,c2,c3,ans1,ans2,ans,vx1,vx2,vy1,vy2,pl1,pl2; double t1,t2,mt,x1,x2,x3,x4,y1,y2,y3,y4,v1,v2; scanf("%d",&T); while(T--) { scanf("%lf %lf %lf %lf %lf",&x1, &y1, &x2, &y2, &v1); scanf("%lf %lf %lf %lf %lf",&x3, &y3, &x4, &y4, &v2); pl1 = dis(x1,y1,x2,y2); pl2 = dis(x3,y3,x4,y4); t1 = pl1 / v1; t2 = pl2 / v2; mt = min (t1,t2); vx1 = v1 * (x2 - x1) / pl1; vy1 = v1 * (y2 - y1) / pl1; vx2 = v2 * (x4 - x3) / pl2; vy2 = v2 * (y4 - y3) / pl2; c1 = pow(vx1 - vx2,2) + pow(vy1 - vy2,2); //a c2 = 2 * ((x1 - x3) * (vx1 - vx2) + (y1 - y3) * (vy1 - vy2)); // b c3 = pow(x1- x3,2) + pow(y1 - y3,2); // c if(c2 >= 0) ans1 = c3; else { double nice = - c2 / (2 * c1); //对称轴 if(nice <= mt) ans1 = c1 * nice *nice + c2 * nice + c3; //二次函数 a * X ^ 2 + b * x + c; else ans1 = c1 * mt * mt + c2 * mt + c3; } if(t1 == t2) ans2 = ans1; else if(t1 < t2) { mt = t2 - t1; x3 = x3 + vx2 * t1; y3 = y3 + vy2 * t1; c1 = vx2 * vx2 + vy2 * vy2; c2 = 2 * ((x3 - x2) * vx2 + (y3 - y2) * vy2); c3 = pow(x3 - x2,2) + pow(y3 - y2,2); if(c2 >= 0) ans2 = c3; else { double nice = - c2 / (2 * c1); if(nice <= mt) ans2 = c1 * nice * nice + c2 * nice + c3; else ans2 = c1 * mt * mt + c2 * mt + c3; } } else { mt = t1 - t2; x1 = x1 + vx1 * t2; y1 = y1 + vy1 * t2; c1 = vx1 * vx1 + vy1 * vy1; c2 = 2 * ((x1 - x4) * vx1 + (y1 - y4) * vy1); c3 = pow(x1 - x4,2) + pow(y1 - y4,2); if(c2 >= 0) ans2 = c3; else { double nice = - c2 / (2 * c1); if(nice <= mt) ans2 = c1 * nice * nice + c2 * nice + c3; else ans2 = c1 * mt * mt + c2 * mt + c3; } } ans = sqrt(min(ans1,ans2)); printf("%.4lf\n",ans); } return 0;}

转载地址:https://blog.csdn.net/WYK1823376647/article/details/52493989 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【codeforces 711B + 枚举】
下一篇:【zzulioj 1904: 小火山的股票交易】

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年03月19日 01时47分36秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

python os.walk如何不遍历隐藏文件_python 获取文件下所有文件或目录os.walk()的实例... 2019-04-21
python 股票估值_【中金固收·固收+】隐藏价值的角落:限售股AAP估值及Python实现方法(上)... 2019-04-21
java文档生成_Java文档自动生成 2019-04-21
java 共享目录_java 操作windows 共享目录方法介绍 2019-04-21
java 监控 宕机_JAVA监测tomcat是否宕机,控制重启 2019-04-21
catch that cow java_POJ3278——Catch That Cow 2019-04-21
java integer 不变模式_Java代码的变与不变 2019-04-21
java guava 使用_Java8-Guava实战示例 2019-04-21
python barrier option pricing_《Python金融数据分析》书内代码实战与讲解(二)金融衍生物定价... 2019-04-21
java自带工具_深入了解Java JDK自带工具,包括javac、jar、jstack等,实用~ 2019-04-21
gnome mysql client_解决MySQLWorkbenchgnome-keyring-daemon错误的方法分享 2019-04-21
java线程占用CPU_在windows下揪出java程序占用cpu很高的线程并完美解决 2019-04-21
java多态替换switch_使多态性无法解决那些switch / case语句的麻烦 2019-04-21
java httpclient 进度条_如何使用Apache HttpClient 4获取文件上传的进度条? 2019-04-21
下列不属于java语言特点的是_下列选项中,不属于Java语言特点的一项是( )。... 2019-04-21
java中小数的乘法_javascript的小数点乘法除法实例 2019-04-21
kappa一致性检验教程_SPSS在线_SPSSAU_Kappa一致性检验 2019-04-21
linux shell mysql备份_linux shell 备份mysql 数据库 2019-04-21
Java双向链表时间复杂度_链表是什么?有多少种链表?时间复杂度是? 2019-04-21
unity3d能和java系统整合吗_Android与Unity3d的整合 2019-04-21