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 ① ...
随机推荐
- 关于在DEDECMS当中模板文件不存在的解决方案
大家可能在生成文档的时候遇到过,模板文件不存在,无法解析 这个问题,其实这个遇到这个问题的大多数人应该是修改了默认模板的名称才导致这样的问题,如果你避免这种问题大家在一开始对模板进行命名的时候就要写 ...
- C#.NET Winform 通用开发框架
C/S系统开发框架-企业版 V4.0 (Enterprise Edition) 简介: http://www.csframework.com/cs-framework-4.0.htm 视频下载: 百度 ...
- 为什么Android AsyncTask的使用要遵循五大原则
引言 AsyncTask是一个围绕Handler和Thread而设计的助手类,封装了在工作线程中与UI交互的细节,只需要对应重写几个回调方法即可,并使得代码更加简洁,优雅.但要注意的是AsyncTas ...
- BZOJ 2572 高速公路
Description Y901高速公路是一条重要的交通纽带,政府部门建设初期的投入以及使用期间的养护费用都不低,因此政府在这条高速公路上设立了许多收费站.Y901高速公路是一条由N-1段路以及N个收 ...
- [BZOJ 1033] [ZJOI2008] 杀蚂蚁antbuster 【模拟!】
题目链接: BZOJ - 1033 题目分析 模拟!纯粹按照题目描述模拟! 这是一道喜闻乐见的经典模拟题! 我一共写了2遍,Debug 历时2天的所有晚自习 ... 时间超过 8h ... 我真是太弱 ...
- java中的string字符串中的trim函数的作用
去掉字符串首尾空格 防止不必要的空格导致错误public class test{ public static void main(String[] args) { String str = " ...
- mysql中的group_concat函数的用法
本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . MySQL中group_concat函数 完整的语法如下: grou ...
- code_analyzer(代码分析助手)
软件名: code_analyzer 使用c语言 pcre正则库分析源码文件,包括文件中的头文件.宏定义.函数. 用途: 无聊时,可以用来打发下时间. 演示: 对于本源程序的分析结果如下: ##### ...
- BZOJ1631: [Usaco2007 Feb]Cow Party
1631: [Usaco2007 Feb]Cow Party Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 459 Solved: 338[Submit ...
- 数位DP:SPOJ KPSUM - The Sum
KPSUM - The Sum One of your friends wrote numbers 1, 2, 3, ..., N on the sheet of paper. After that ...