HDU 2298:Toxophily(推公式)
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. ②
把①带入②: y = x * tan(θ) - 1 / 2 * g * (x / v / cos(θ)) ^ 2.
y = x * tan(θ) - (g * x ^ 2) / (2 * v) * (1 + tan(θ)^2).
得到一元二次方程:
x * x * g * tan(θ)^2 - 2 * v * v * x + g * x * x + 2 * v * v * y = 0.
然后求解,注意角度合法的范围在0<=θ<=PI/2中间,然后取较小的一个。
#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-;
const double G = 9.8;
const double PI = acos(-1.0) / ;
double x, y, v, t; int main() {
int T; scanf("%d", &T);
while(T--) {
scanf("%lf%lf%lf", &x, &y, &v);
if(y > v * v / / G) {
puts("-1");
} else {
double a = G * x * x;
double b = -2.0 * v * v * x;
double c = G * x * x + * v * v * y;
double delta = b * b - * a * c;
double x1 = (-b + sqrt(delta)) / / a, x2 = (-b - sqrt(delta)) / / a;
x1 = atan(x1), x2 = atan(x2);
int f1 = , f2 = ;
if( <= x1 && x1 <= PI) f1 = ;
if( <= x2 && x2 <= PI) f2 = ;
if(!f1 && !f2) puts("-1");
else if(f1 && f2) printf("%.6f\n", x1 < x2 ? x1 : x2);
else if(f1) printf("%.6f\n", f1);
else printf("%.6f\n", f2);
}
}
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(三分法)
这道题目,可以推出物理公式直接来做,但是如果推不出来就必须用程序的一种算法来实现了,物理公式只是适合这一个或者某个题,但是这种下面这种解决问题的方法确实解决了一类问题 ----三分法,大家可能都听说过 ...
- HDU 2298 Toxophily 【二分+三分】
一个人站在(0,0)处射箭,箭的速度为v,问是否能够射到(x,y)处,并求最小角度. 首先需要判断在满足X=x的情况下最大高度hmax是否能够达到y,根据物理公式可得 h=vy*t-0.5*g*t*t ...
- HDU 4870Rating(推公式)
有关这个题的高斯消元的方法已经在我的另一篇博客中给出http://www.cnblogs.com/gj-Acit/p/3888382.html 这里介绍一个很吊的解法,复杂度降到了O(n),以下转自h ...
- HDU 2298 Toxophily
题目: Description The recreation center of WHU ACM Team has indoor billiards, Ping Pang, chess and bri ...
- HDU 4870 Rating(概率、期望、推公式) && ZOJ 3415 Zhou Yu
其实zoj 3415不是应该叫Yu Zhou吗...碰到ZOJ 3415之后用了第二个参考网址的方法去求通项,然后这次碰到4870不会搞.参考了chanme的,然后重新把周瑜跟排名都反复推导(不是推倒 ...
- 2017多校第7场 HDU 6128 Inverse of sum 推公式或者二次剩余
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6128 题意:给你n个数,问你有多少对i,j,满足i<j,并且1/(ai+aj)=1/ai+1/a ...
- HDU 4873 ZCC Loves Intersection(JAVA、大数、推公式)
在一个D维空间,只有整点,点的每个维度的值是0~n-1 .现每秒生成D条线段,第i条线段与第i维度的轴平行.问D条线段的相交期望. 生成线段[a1,a2]的方法(假设该线段为第i条,即与第i维度的轴平 ...
- HDU 5047 推公式+别样输出
题意:给n个‘M'形,问最多能把平面分成多少区域 解法:推公式 : f(n) = 4n(4n+1)/2 - 9n + 1 = (8n+1)(n-1)+2 前面部分有可能超long long,所以要转化 ...
- Balls and Boxes---hdu5810(推公式)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5810 有n个球m个盒子,随机把球放到盒子中,求每个盒子球个数的方差的期望值 E[V]; 推公式吧,或者 ...
随机推荐
- wpf怎么使用WindowsFormsHost(即winform控件)
原文:wpf怎么使用WindowsFormsHost(即winform控件) 使用方法: 1.首先,我们需要向项目中的引用(reference)中添加两个动态库dll,一个是.NET库中的System ...
- WPF:如何为程序添加splashScreen?
原文:WPF:如何为程序添加splashScreen? 大家是否还记得在Windows Forms程序中如何实现splashScreen吗?我们一般都会使用Microsoft.VisualBasic. ...
- Android adb shell 无法启动:insufficient permissions for device
解决办法1:lsusb查看vendorId号,然后在/etc/udev/rules.d/目录下增加(或修改)51-android.rules文件.增加一条记录:SUBSYSTEM=="usb ...
- miniui autocomplete支持放大镜按钮(data-grid)
<style type="text/css"> html body .searchbox .mini-buttonedit-close { background:url ...
- 【shell】递归函数----调用自身的函数
什么是递归函数? 一句话,调用自己的函数称为递归函数! #!/bin/bash declare -i count checkoutCount(){ read -p "Enter an cou ...
- Android 开发相关
1.app下载更新 https://git.oschina.net/lwngreat/UpdateHelper
- flume本地调试
本机idea远程调试flume:https://blog.csdn.net/u012373815/article/details/60601118 遇到 [root@hadoop02 bin]# ./ ...
- 中国2017 Google 开发者大会第一天简单回顾
昨天有幸参加了中国2017 Google 开发者大会,在这第一天就收获满满,昨天太忙了,今天早晨来一起简单回顾一下,可以让没有参加的童鞋们感受一下现场的温度. 早早就来到了会议现场,外面看不出什么特别 ...
- Android零基础入门第86节:探究Fragment生命周期
一个Activity可以同时组合多个Fragment,一个Fragment也可被多个Activity 复用.Fragment可以响应自己的输入事件,并拥有自己的生命周期,但它们的生命周期直接被其所属的 ...
- C#图片灰度处理(位深度24→位深度8)
#region 灰度处理 /// <summary> /// 将源图像灰度化,并转化为8位灰度图像. /// </summary> /// <param name=&qu ...