HDU 2298 三分】的更多相关文章

斜抛从(0,0)到(x,y),问其角度. 首先观察下就知道抛物线上横坐标为x的点与给定的点的距离与角度关系并不是线性的,当角度大于一定值时可能会时距离单调递减,所以先三分求个角度范围,保证其点一定在抛物线下方,这样距离和角度的关系就是单调的了,再二分角度即可. /** @Date : 2017-09-23 23:17:11 * @FileName: HDU 2298 三分.cpp * @Platform: Windows * @Author : Lweleth (SoungEarlf@gmail…
代码+解析: 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 //一看是一个一元二次函数那他的图像不是先减后增就是先增…
开始推导用公式求了好久(真的蠢),发现精度有点不够. 其实这种凸线上求点类的应该上三分法的,当作入门吧... /** @Date : 2017-09-23 21:15:57 * @FileName: HDU 5144 三分 无聊物理题.cpp * @Platform: Windows * @Author : Lweleth (SoungEarlf@gmail.com) * @Link : https://github.com/ * @Version : $Id$ */ #include <bit…
一个人站在(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)) 由于凸函数有以下…
Toxophily Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1429    Accepted Submission(s): 739 Problem Description The recreation center of WHU ACM Team has indoor billiards, Ping Pang, chess an…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4717 思路:三分时间求极小值. #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; const int MAX_N = (300 + 30); const double e…
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4717 n个点,给出初始坐标和移动的速度和移动的方向,求在哪一时刻任意两点之间的距离的最大值的最小. 对于最大值的最小问题首先就会想到二分,然而由于两点之间的距离是呈抛物线状,所以三分的方法又浮上脑海,当然二分也可以做,不过思维上更复杂一些 #include<cmath> #include<cstdio> #include<cstring> #include<iostrea…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2298 #include<bits/stdc++.h> using namespace std; const double pi=acos(-1.0); const double g=9.8; ; int main() { int t; scanf("%d",&t); while (t--) { double x,y,v; scanf("%lf%lf%lf&qu…
http://acm.hdu.edu.cn/showproblem.php?pid=2298 题意:给出一个x,y,v,问从(0,0)以v为初速度射箭,能否射到(x,y)这个点,如果能,输出最小的射出角度(与x轴),否则输出-1. 思路:首先考虑不能到达的情况,由动能定理mgy > 1 / 2 * m * v * v的时候,就输出-1. 然后可以列出两个式子: x = v * t * cos(θ)  ① y = v * t * sin(θ) - 1 / 2 * g * t * t. ② 把①带入…
这道题目,可以推出物理公式直接来做,但是如果推不出来就必须用程序的一种算法来实现了,物理公式只是适合这一个或者某个题,但是这种下面这种解决问题的方法确实解决了一类问题 ----三分法,大家可能都听说过二分法,没有听说三分法,确实三分法很冷,但是学会了就是学会了,而且他的计算速度并不慢,时间复杂度是log型的,所以推荐学会这种方法,下面是具体的代码实现,包括怎么三分的过程,可以平均分成三段,也可以先分成一半,在接着把后面的一半接着再分一半,下面是后面的这种分法: #include <stdio.h…