• 2018 ccpc吉林 The Tower


    传送门:HDU - 6559

    题意

    在一个三维空间,给定一个点和他的三维速度,给定一个圆锥,问这个点最早什么时候能撞上圆锥。

    题解

    本来一直想着怎么求圆锥的方程,然后....队友:这不是二分吗!然后问题就转换成了要怎么求当前时间是不是已经穿过了圆锥了....然后就gg了。

    正解就是联立:

    ① r ' = (h-z)/h*r

    ② x=x0+vx*t; y=y0+vy*t; z=z0+vz*t;

    ③ x2+y2=r ' 2

    然后就可以求解出 t 了(这个一元二次方程及其麻烦.....)不知道为啥直接输出t1就可以了,而不是输出非负的最小值....(逃

    代码

     1 #include<bits/stdc++.h>
     2 #define eps 1e-12
     3 using namespace std;
     4 
     5 double r,h;
     6 double x,y,z;
     7 double vx,vy,vz;
     8 
     9 int main()
    10 {
    11     int t;
    12     scanf("%d",&t);
    13     int tt=0;
    14     while(t--){
    15         scanf("%lf%lf",&r,&h);
    16         scanf("%lf%lf%lf",&x,&y,&z);
    17         scanf("%lf%lf%lf",&vx,&vy,&vz);
    18         printf("Case %d: ",++tt);
    19         double a=(r*r/h/h*vz*vz-vx*vx-vy*vy);
    20         double b=-r*r/h/h*(2*h*vz-2*z*vz)-2*x*vx-2*y*vy;
    21         double c=-(x*x+y*y-r*r-r*r*z*z/h/h+2*h*z*r*r/h/h);
    22         double derta=b*b-4*a*c;
    23         double t1=(-b+sqrt(derta))/(2*a);
    24         double t2=(-b-sqrt(derta))/(2*a);
    25         printf("%.10f
    ",t1);
    26     }
    27     return 0;
    28 } 
  • 相关阅读:
    LeetCode_4——寻找两个有序数组的中位数
    Java的CAS与ABA问题
    跨域问题解决
    解决git-for-windows官网下载速度慢的问题
    Java对观察者模式的支持
    Java动态代理
    设计模式七大原则
    UML中的类图关系
    布隆过滤器(Bloom Filter)与Hash算法
    Ubuntu16安装fabric1.4.4环境
  • 原文地址:https://www.cnblogs.com/lilibuxiangtle/p/13740984.html
Copyright © 2020-2023  润新知