HDU 2298 Toxophily 【二分+三分】
一个人站在(0,0)处射箭,箭的速度为v,问是否能够射到(x,y)处,并求最小角度。
首先需要判断在满足X=x的情况下最大高度hmax是否能够达到y,根据物理公式可得
h=vy*t-0.5*g*t*t
vx=v*cos(a)
vy=v*sin(a)
t=x/vx
由此可推出:h=x*tan(a)-(g*x*x)/(2*v*v)/cos(a)/cos(a)
g,x,v已知,设A=x,B=(g*x*x)/(2*v*v)
原式化为:h=A*tan(a)+(-B/(cos(a)^2))
由于凸函数有以下性质:
1,如果f和g是凸函数,那么m(x) = max{f(x),g(x)}和h(x) = f(x) + g(x)也是凸函数。
2,如果f和g是凸函数,且g递增,那么h(x) = g(f(x))是凸函数。
tan(a)为凸函数,cos(a)为凸函数,-(1/x)为增凸函数。所以h为凸函数。
以上是h函数是凸函数的证明,因为网上的题解基本都是一句带过,小白的我又看不懂,只能自己证明。若有出错的地方,请大神指出。拜谢。
因此可以三分出hmax。
若能到达,再通过二分得到最小的仰角。
#include<stdio.h>
#include<string.h>
#include<math.h>
const double pi=acos(-1.0),g=9.8,eps=1e-;
double x,y,v;
double cal(double a){
double vx=v*cos(a);
double vy=v*sin(a);
double t=x/vx;
double h=vy*t-g*t*t/;
return h;
}
double thrdiv(){
double l=0.0,r=pi/2.0,lm,rm;
while(r-l>eps){
lm=(l*2.0+r)/3.0;
rm=(l+r*2.0)/3.0;
if(cal(lm)>cal(rm))
r=rm;
else
l=lm;
}
return l;
}
double bin(double a){
double l=,r=a,mid;
while(r-l>eps){
mid=(l+r)/;
if(cal(mid)<y)
l=mid;
else
r=mid;
}
return l;
}
int main(){
double ans,h;
int t;
scanf("%d",&t);
while(t--){
scanf("%lf%lf%lf",&x,&y,&v);
ans=thrdiv();h=cal(ans);
if(y-h>eps)
printf("-1\n");
else if(fabs(y-h)<=eps)
printf("%.6f\n",ans);
else{
ans=bin(ans);
printf("%.6f\n",ans);
}
}
return ;
}
HDU 2298 Toxophily 【二分+三分】的更多相关文章
- HDU 2298 Toxophily(公式/三分+二分)
Toxophily Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU 2298 Toxophily
题目: Description The recreation center of WHU ACM Team has indoor billiards, Ping Pang, chess and bri ...
- HDU -2298 Toxophily(三分法)
这道题目,可以推出物理公式直接来做,但是如果推不出来就必须用程序的一种算法来实现了,物理公式只是适合这一个或者某个题,但是这种下面这种解决问题的方法确实解决了一类问题 ----三分法,大家可能都听说过 ...
- HDU 2298 三分
斜抛从(0,0)到(x,y),问其角度. 首先观察下就知道抛物线上横坐标为x的点与给定的点的距离与角度关系并不是线性的,当角度大于一定值时可能会时距离单调递减,所以先三分求个角度范围,保证其点一定在抛 ...
- Toxophily-数论以及二分三分
G - Toxophily Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submi ...
- HDU 2298(纯物理加解一元二次方程)
Toxophily Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- 第二次组队赛 二分&三分全场
网址:CSUST 7月30日(二分和三分) 这次的比赛是二分&三分专题,说实话以前都没有接触过二分,就在比赛前听渊神略讲了下.......不过做着做着就对二分熟悉了,果然做题是学习的好方法啊~ ...
- Toxophily HDU - 2298 三分+二分
代码+解析: 1 //题意: 2 //有一个大炮在(0,0)位置,为你可不可以把炮弹射到(x,y)这个位置 3 //题目给你炮弹初始速度,让你求能不能找出来一个炮弹射出时角度满足题意 4 //题解: ...
- [hdu 2298] 物理推导+二分答案
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2298 #include<bits/stdc++.h> using namespace st ...
随机推荐
- WEB前端开发和调试的工具
前端开发在线课程: http://yun.lu/student/course/list/8 1.HBuilder:WEB开发IDE工具 hbulider,内核是eclipse,Dcloud公司出品 ...
- ahjesus sql手动重新更新ID
declare cus_cursor cursor scroll for SELECT Id from [dbo].[TLotterySpiderRule] open cus_cursor decla ...
- Ahjesus Nodejs02 使用集成开发环境
下载最新版webstorm, 选择此集成开发环境是因为支持性较好,在vs下也有插件支持,不过感觉有些牵强 附vs插件 NTVS 详细介绍 安装好以后就需要配置npm NPM 国内高速镜像 source ...
- Smartforms常见问题
分类: 1.使用SFSY-FORMPAGES显示总页数的时候,如果页数大于9,将会在前10页显示成星号* 解决: 有时候这样做完之后,星号*是没有了,但是字体会有颠倒或者重叠的现象. 如果出了这个问题 ...
- atitit.mp4 视频文件多媒体格式结构详解
atitit.mp4 视频文件多媒体格式结构详解 1. 一.基本概念1 2. MP4文件概述2 3. mp4是由一个个“box”组成的,2 4. 典型简化mp43 5. Fragments5 6. r ...
- How to Build Office Developer Tools Projects with TFS Team Build 2012
Introduction Microsoft Visual Studio 2012 provides a new set of tools for developing apps for Office ...
- Sharepoint学习笔记—习题系列--70-573习题解析 -(Q121-Q124)
Question 121You develop a custom approval workflow. The workflow uses the CreateTask class to assign ...
- Android 设置EditText光标Curso颜色及粗细
在android的输入框里,如果要修改光标的颜色及粗细步骤如下两步即可搞定: 1.在资源文件drawable下新建一个光标控制color_cursor.xml <?xml version=&qu ...
- 【读书笔记】iOS-GCD-block
一,block的定义 //申明变量 (void)(^PrintStr)(void); //定义 PrintStr=^{ NSLog(@"PrintStr"); }; //调用 Pr ...
- 深入理解Android的startservice和bindservice
一.首先,让我们确认下什么是service? service就是android系统中的服务,它有这么几个特点:它无法与用户直接进行交互.它必须由用户或者其他程序显式的启动.它的优先级比 ...