HDU -2298 Toxophily(三分法)
这道题目,可以推出物理公式直接来做,但是如果推不出来就必须用程序的一种算法来实现了,物理公式只是适合这一个或者某个题,但是这种下面这种解决问题的方法确实解决了一类问题 ----三分法,大家可能都听说过二分法,没有听说三分法,确实三分法很冷,但是学会了就是学会了,而且他的计算速度并不慢,时间复杂度是log型的,所以推荐学会这种方法,下面是具体的代码实现,包括怎么三分的过程,可以平均分成三段,也可以先分成一半,在接着把后面的一半接着再分一半,下面是后面的这种分法:
#include <stdio.h>
#include <string.h>
#include <math.h>
#define EPS 1e-8//定义精度
#define EXP(r) x * tan(r) - 4.9 * x * x * (tan(r) * tan(r) + 1) / (v * v)//定义推出来的式子,
//这个可以根据简单的公式就可以计算出来,设出来两个未知数,两个式子,一定可以解出来
#define PI 3.141592653589732384626433832795 //宏定义PI,这个的结果可以用Windows上带的计算器直接写上,比那个atan要快
int main()
{
int t;
scanf("%d", &t);
while(t --)
{
double x, y, v;
scanf("%lf %lf %lf", &x, &y, &v);
double l = ; double r = PI * 0.5; double mid; double mmid;
mid = (l + r) / ;//mid代表中点
mmid = (mid + r) / ;//mmid代表中点和右边的区间点之间的中点
while(fabs(mid - mmid) > EPS)//执行条件,当他们之间的差值的绝对值大于精度时,继续循环
{
if(EXP(mid) > EXP(mmid))//关键代码,若前一个大于后一个值,则右端点前移到mmid
r = mmid;
else
l = mid;//否则,左端点后移到中点mid
mid = (l + r) / ;//接着再求他们的mid和mmid
mmid = (mid + r) / ;
}
if(EXP(mid) < y)//当最大值不满足所给的y的时候,这时候打印-1
{
printf("-1\n");
continue;//继续下一次循环
}
r = mmid;
l = ;
mid = (l + r) / ;
while(fabs(EXP(mid) - y) > EPS )//如果满足则要求出来这个弧度来,也是执行到大于精度
{
if(EXP(mid) > y)
r = mid;
else
l = mid;
mid = (l + r) / ;
}
printf("%.6lf\n", mid);
}
return ;
}
HDU -2298 Toxophily(三分法)的更多相关文章
- HDU 2298 Toxophily
题目: Description The recreation center of WHU ACM Team has indoor billiards, Ping Pang, chess and bri ...
- HDU 2298 Toxophily(公式/三分+二分)
Toxophily Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU 2298 Toxophily 【二分+三分】
一个人站在(0,0)处射箭,箭的速度为v,问是否能够射到(x,y)处,并求最小角度. 首先需要判断在满足X=x的情况下最大高度hmax是否能够达到y,根据物理公式可得 h=vy*t-0.5*g*t*t ...
- HDU 2298 三分
斜抛从(0,0)到(x,y),问其角度. 首先观察下就知道抛物线上横坐标为x的点与给定的点的距离与角度关系并不是线性的,当角度大于一定值时可能会时距离单调递减,所以先三分求个角度范围,保证其点一定在抛 ...
- HDU 2298:Toxophily(推公式)
http://acm.hdu.edu.cn/showproblem.php?pid=2298 题意:给出一个x,y,v,问从(0,0)以v为初速度射箭,能否射到(x,y)这个点,如果能,输出最小的射出 ...
- 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 ...
- HDU 2298(纯物理加解一元二次方程)
Toxophily Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- HDU-2298 Toxophily (三分法入门系列)
题意: 意大利炮射出炮弹的速度为v,求在(0,0)击中(x,y)处的目标,发射炮弹的角度. 题解: 设f(α)表示角度为α时, f(α) = vsin(α) * t - 4.9 * t * t ① ...
随机推荐
- cygwin编译ffmpeg移植到android平台问题集锦
编译环境: windows xp Cygwin 1.1.3.1 NDK r9 1.提示各种command not found 比如 ./config.sh: line 6: $'--arch=arm\ ...
- var a =a || {}
- 转:2014 年 15 款新评定的最佳 PHP 框架
原文来自于:http://blog.jobbole.com/59999/ 原文出处: codegeekz 译文出处:oschina 欢迎分享原创到伯乐头条 通常,框架都会被认为是帮助开发者快速 ...
- 架设wordpress再vps上的 一些感想总结
日本vps.樱花系列 配置: 2cpu+1G内存+100G硬盘 系统 第一次我把默认的centos 给换了..原因就是,不会linux.而且我主要用.net 感觉 mono也行.但是linux不会. ...
- Js中的window.parent ,window.top,window.self详解
在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口, opener是用open方法 ...
- java敏感词过滤
敏感词过滤在网站开发必不可少.一般用DFA,这种比较好的算法实现的. 参考链接:http://cmsblogs.com/?p=1031 一个比较好的代码实现: import java.io.IOExc ...
- Linux下高并发网络编程
Linux下高并发网络编程 1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时, 最高的并发数量都要受到系统对用户单一进程同时可打 ...
- ural-1099-Work Scheduling(裸带花树)
题意: 有N个人,有限对的人可以在一起工作,问最多能有多少对. 分析: 任意图的最大匹配 // File MAXName: 1099.cpp // Author: Zlbing // Created ...
- Java---实现运行任意目录下class中加了@MyTest的空参方法(实现图形界面)
说明: 因为上个代码,总是要输入完整的绝对路径,比较麻烦,于是,就写了这个小程序,直接进入文件对话框选择需要运行的class文件. 只需要提前输入完整的类名. 注意:加的MyTest必须打个包,加上: ...
- Response.End(); 用HttpContext.Current.ApplicationInstance.CompleteRequest 代替
Response.End(); 会报异常 HttpContext.Current.ApplicationInstance.CompleteRequest 这里有个讨论的帖子很有意思:http://q. ...