【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 Input2
1 0 2 2 5 0 0 -1 -1 4 0 0 2 0 3 1 1 2 1 2 Sample Output1.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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年03月19日 01时47分36秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
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
java线程占用CPU_在windows下揪出java程序占用cpu很高的线程并完美解决
2019-04-21
java多态替换switch_使多态性无法解决那些switch / case语句的麻烦
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