代码+解析:

 1 //题意:
2 //有一个大炮在(0,0)位置,为你可不可以把炮弹射到(x,y)这个位置
3 //题目给你炮弹初始速度,让你求能不能找出来一个炮弹射出时角度满足题意
4 //题解:
5 //由物理公式分析可知:
6 //Vx=v*cos(a)
7 //Vy=v*sin(a)
8 //t=x/Vx=x/(v*cos(a))
9 //y=-(1/2)*g*t*t+Vy*t=-(1/2)*g*t*t+v*sin(a)*t
10 //一看是一个一元二次函数那他的图像不是先减后增就是先增后减。那就用三分找出来它的最高位置对应度数是多少(假设是ans)
11 //那么(0,ans)与(ans,90)这两个区间所对应曲线肯定一致,那我们就挑一个区间进行二分查找答案就完了
12 #include<stdio.h>
13 #include<stdlib.h>
14 #include<iostream>
15 #include<string.h>
16 #include<algorithm>
17 #include<math.h>
18 using namespace std;
19 const int maxn=500005;
20 const int INF=0x3f3f3f3f;
21 #define eps 1e-11
22 #define PI acos(-1.0) //180度的弧度值
23 typedef long long ll;
24 double x,y,v;
25 double f(double a) //求大炮角度为a时,大炮能射多高
26 {
27 double t = x/(v*cos(a));
28 return v*sin(a)*t - 9.8/2.0*t*t;
29 }
30 int main()
31 {
32 int t;
33 scanf("%d",&t);
34 while(t--)
35 {
36 scanf("%lf%lf%lf",&x,&y,&v);
37 double l=0,r=PI/2,m1,m2; //先找出来大炮的能射最高所对应的角度,只需要在(0,90)度范围内找就行了
38 while(r-l>eps)
39 {
40 m1=(l+r)/2;
41 m2=(m1+r)/2;
42 if(f(m1)<f(m2))
43 l=m1;
44 else r=m2;
45 }
46 if(f(l)<y) //如果大炮最高也不到y,那就根本无法打到那个位置
47 {
48 printf("-1\n");
49 continue;
50 }
51 double mid,ll=0,rr=l;
52 while(rr-ll>eps) //找到之后在二分出来那个角度能刚好射到高度为y
53 {
54 mid=(ll+rr)/2;
55 if(f(mid)<y)
56 ll=mid;
57 else rr=mid;
58 }
59 printf("%.6lf\n",ll);
60 }
61 return 0;
62 }

Toxophily HDU - 2298 三分+二分的更多相关文章

  1. HDU 2298 三分

    斜抛从(0,0)到(x,y),问其角度. 首先观察下就知道抛物线上横坐标为x的点与给定的点的距离与角度关系并不是线性的,当角度大于一定值时可能会时距离单调递减,所以先三分求个角度范围,保证其点一定在抛 ...

  2. HDU 2298 Toxophily(公式/三分+二分)

    Toxophily Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  3. HDU 5144 三分

    开始推导用公式求了好久(真的蠢),发现精度有点不够. 其实这种凸线上求点类的应该上三分法的,当作入门吧... /** @Date : 2017-09-23 21:15:57 * @FileName: ...

  4. HDU 2298 Toxophily 【二分+三分】

    一个人站在(0,0)处射箭,箭的速度为v,问是否能够射到(x,y)处,并求最小角度. 首先需要判断在满足X=x的情况下最大高度hmax是否能够达到y,根据物理公式可得 h=vy*t-0.5*g*t*t ...

  5. [hdu 2298] 物理推导+二分答案

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2298 #include<bits/stdc++.h> using namespace st ...

  6. HDU 4355 Party All the Time(三分|二分)

    题意:n个人,都要去參加活动,每一个人都有所在位置xi和Wi,每一个人没走S km,就会产生S^3*Wi的"不舒适度",求在何位置举办活动才干使全部人的"不舒适度&quo ...

  7. HDU 2298:Toxophily(推公式)

    http://acm.hdu.edu.cn/showproblem.php?pid=2298 题意:给出一个x,y,v,问从(0,0)以v为初速度射箭,能否射到(x,y)这个点,如果能,输出最小的射出 ...

  8. HDU 2298 Toxophily

    题目: Description The recreation center of WHU ACM Team has indoor billiards, Ping Pang, chess and bri ...

  9. HDU -2298 Toxophily(三分法)

    这道题目,可以推出物理公式直接来做,但是如果推不出来就必须用程序的一种算法来实现了,物理公式只是适合这一个或者某个题,但是这种下面这种解决问题的方法确实解决了一类问题 ----三分法,大家可能都听说过 ...

随机推荐

  1. python模块详解 | filecmp

    简介: filecmp是python内置的一个模块,用于比较文件及文件夹的内容,它是一个轻量级的工具,使用非常简单 两个主要的方法: filecmp.cmp(f1, f2[, shallow]) 比较 ...

  2. 【Oracle】Oracle中chr()的含义

    oracle中chr含义 CHR(10)和 CHR(13)--在oracle都为换行 chr(32)--表示空格 DECLARE v_a VARCHAR2(255); v_b VARCHAR2(255 ...

  3. 聊聊 React

    都说 React 开发效率高,但效率高在哪呢?来细看看. 用 d3 写一个 List: const renderList = data => { d3.select("ul" ...

  4. mysql锁表问题

    查看当前所有的进程信息: show full processlist; 查看当前所有的事务 select * from information_schema.innodb_trx; 查看当前出现的锁 ...

  5. 超详细 安装VMware Workstation,并安装WIN10操作系统连接外网 步骤指导

    首先下载VMware Workstation15.1版本,我保存在迅雷链接里面,下载速度非常可观. 链接:https://pan.xunlei.com/s/VMRSt6hHMZXEmPZCm6gJcG ...

  6. C#高级编程第11版 - 第八章 索引

    [1]8.1 引用方法 1.委托是指向方法的.NET地址变量. 2.委托是类型安全的类,定义了返回类型和参数类型.委托类不单单只包含一个方法引用,它也可以保存多个方法的引用. 3.Lambda表达式直 ...

  7. 提取一个int类型数最右侧的1

    提取一个int类型数最右侧的1 算法描述 把一个int类型的数,提取出最右侧的1来,例如: 6 对应的二进制位 0000 0110,那么取出来的应该是0000 0010 算法思路 对原数0000 01 ...

  8. 浅谈linux IO csy 360技术 2021-01-18

    浅谈linux IO csy 360技术 2021-01-18

  9. three.js cannon.js物理引擎之制作拥有物理特性的汽车

    今天郭先生说一说使用cannon.js的车辆辅助类让我们的汽车模型拥有物理特性.效果图如下,在线案例请点击博客原文. 下面我们说一下今天要使用的两个类,并简单的看看他们的物理意义 1. Raycast ...

  10. Git轻松入门1:本地仓库篇

    什么是Git 版本控制系统 首先我们要明白,什么是版本控制系统(version control systems)? 版本控制系统,顾名思义,就是能控制文件处于哪个版本的系统. e.g. 你在博客园里编 ...