Toxophily HDU - 2298 三分+二分
代码+解析:
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 三分+二分的更多相关文章
- HDU 2298 三分
斜抛从(0,0)到(x,y),问其角度. 首先观察下就知道抛物线上横坐标为x的点与给定的点的距离与角度关系并不是线性的,当角度大于一定值时可能会时距离单调递减,所以先三分求个角度范围,保证其点一定在抛 ...
- HDU 2298 Toxophily(公式/三分+二分)
Toxophily Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU 5144 三分
开始推导用公式求了好久(真的蠢),发现精度有点不够. 其实这种凸线上求点类的应该上三分法的,当作入门吧... /** @Date : 2017-09-23 21:15:57 * @FileName: ...
- HDU 2298 Toxophily 【二分+三分】
一个人站在(0,0)处射箭,箭的速度为v,问是否能够射到(x,y)处,并求最小角度. 首先需要判断在满足X=x的情况下最大高度hmax是否能够达到y,根据物理公式可得 h=vy*t-0.5*g*t*t ...
- [hdu 2298] 物理推导+二分答案
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2298 #include<bits/stdc++.h> using namespace st ...
- HDU 4355 Party All the Time(三分|二分)
题意:n个人,都要去參加活动,每一个人都有所在位置xi和Wi,每一个人没走S km,就会产生S^3*Wi的"不舒适度",求在何位置举办活动才干使全部人的"不舒适度&quo ...
- HDU 2298:Toxophily(推公式)
http://acm.hdu.edu.cn/showproblem.php?pid=2298 题意:给出一个x,y,v,问从(0,0)以v为初速度射箭,能否射到(x,y)这个点,如果能,输出最小的射出 ...
- HDU 2298 Toxophily
题目: Description The recreation center of WHU ACM Team has indoor billiards, Ping Pang, chess and bri ...
- HDU -2298 Toxophily(三分法)
这道题目,可以推出物理公式直接来做,但是如果推不出来就必须用程序的一种算法来实现了,物理公式只是适合这一个或者某个题,但是这种下面这种解决问题的方法确实解决了一类问题 ----三分法,大家可能都听说过 ...
随机推荐
- 【Azure Developer】Python代码通过AAD认证访问微软Azure密钥保管库(Azure Key Vault)中机密信息(Secret)
关键字说明 什么是 Azure Active Directory?Azure Active Directory(Azure AD, AAD) 是 Microsoft 的基于云的标识和访问管理服务,可帮 ...
- Linux学习笔记 | 配置ssh
目录: SSH的必要性 将默认镜像源修改为清华镜像源 Linux安装ssh软件 使用putty软件实现ssh连接 Windows下安装winscp SSH的必要性 一般服务器都位于远程而非本地,或者及 ...
- 那些最全面的Windows10安装pytorch踩过的坑以及如何应用
那些最全面的Windows10安装pytorch踩过的坑以及如何应用 一.pytorch简介 2017年1月,由Facebook人工智能研究院(FAIR)基于Torch推出了PyTorch.它是一个基 ...
- ubuntu 安装 docker 并配置镜像加速(使用 apt-get 进行安装)
ubuntu 安装docker CentOS docker安装 https://blog.csdn.net/weixin_44953227/article/details/108597310 你需要这 ...
- rename 表名
rename table 旧表名1 to 新表名1,旧表名2 to 新表名2;
- 【ORA】ORA-4031错误分析和解决办法
1. ORA-4031错误的原因,一般是大量的hard parse导致了shared pool中的free list中产生大量的内存小碎片,当一个需要很大内存来进行hard parse的sql语句到来 ...
- windows下的:开始→运行→命令
开始→运行→命令 集锦 winver---------检查Windows版本wmimgmt.msc----打开windows管理体系结构(WMI)wu ...
- Podinfo,迷你的 Go 微服务模板
项目介绍 Podinfo 是一个用 Go 制作的小型 web 应用程序,它展示了在 Kubernetes 中运行微服务的最佳实践. 它已实现的技术指标(截选自官方 README.md ): 里面每一 ...
- React 入门-redux 和 react-redux
React 将页面元素拆分成组件,通过组装展示数据.组件又有无状态和有状态之分,所谓状态,可以简单的认为是组件要展示的数据.React 有个特性或者说是限制单向数据流,组件的状态数据只能在组件内部修改 ...
- MYSQL基础知识的复习2
1.修改表中的数据 update 表名 set 要修改的字段 where 条件;-- 如果修改多个字段那么字段和字段之间用逗号隔开 2.查询(很重要) 1.查询表中部分字段: select 字段名,字 ...