hdu 5144 NPY and shot

http://acm.hdu.edu.cn/showproblem.php?pid=5144

题意:给你初始的高度和速度,然后让你求出水平的最远距离。

思路:三分枚举角度,然后根据公式求出水平距离。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cmath>
 4 #include <algorithm>
 5 using namespace std;
 6 const double pi=acos(-1.0);
 7 const double eps=1e-6;
 8 const double g=9.8;
 9
10 int t;
11 double h,v;
12 double ok(double x)
13 {
14      double xx=((double)(x/180))*pi;
15      double t1=v*sin(xx)/g;
16      double y=v*t1*sin(xx)-0.5*g*t1*t1;
17      double yy=y+h;
18      double t2=sqrt(yy*2/g);
19      double s=v*cos(xx)*(t1+t2);
20      return s;
21 }
22
23 int main()
24 {
25     scanf("%d",&t);
26     while(t--)
27     {
28         scanf("%lf%lf",&h,&v);
29         double l=0,r=90;
30         double c;
31         while(r-l>eps)
32         {
33              double mid1=(r+l)/2;
34              double mid2=(l+mid1)/2;
35              if(ok(mid1)>=ok(mid2))
36              {
37                  c=mid1;
38                  l=mid2;
39              }
40              else
41                 r=mid1;
42         }
43         printf("%.2lf\n",ok(c));
44     }
45     return 0;
46 }

时间: 2024-10-10 15:09:10

hdu 5144 NPY and shot的相关文章

HDU 5144 NPY and shot(三分法)

当时做这道题时一直想退出物理公式来,但是后来推到导数那一部分,由于数学不好,没有推出来那个关于Θ的最值,后来直接暴力了,很明显超时了,忘了三分法的应用,这道题又是典型的三分求最值,是个单峰曲线,下面是代码 1 #include <stdio.h> 2 #include <math.h> 3 #define PI 3.1415926 4 int v, h; 5 double f(double i)//推倒物理公式 6 { 7 return v*v*1.0*sin(2*i)/9.8+(

HDOJ 5144 NPY and shot 简单物理

三分角度.... NPY and shot Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 236    Accepted Submission(s): 87 Problem Description NPY is going to have a PE test.One of the test subjects is throwing t

HDU 5144 三分

开始推导用公式求了好久(真的蠢),发现精度有点不够. 其实这种凸线上求点类的应该上三分法的,当作入门吧... /** @Date : 2017-09-23 21:15:57 * @FileName: HDU 5144 三分 无聊物理题.cpp * @Platform: Windows * @Author : Lweleth ([email protected]) * @Link : https://github.com/ * @Version : $Id$ */ #include <bits/s

BestCoder22 1003.NPY and shot 解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5144 题目意思:有个人抛物体,已知抛的速度和高度,问可以抛到的最远距离是多少.即水平距离. 做的时候是抄公式的,居然过了,幸运幸运............ 1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #include <cstring> 5 #include <algorit

hdu 5142 NPY and FFT

题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5142 NPY and FFT Description A boy named NPY is learning FFT algorithm now.In that algorithm,he needs to do an operation called "reverse".For example,if the given number is 10.Its binary representai

HDU 5145 NPY and girls(莫队算法+乘法逆元)

[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5145 [题目大意] 给出一个数列,每次求一个区间数字的非重排列数量.答案对1e9+7取模. [题解] 我们发现每次往里加入一个新的数字或者减去一个新的数字,前后的排列数目是可以通过乘除转移的,所以自然想到用莫队算法处理.因为答案要求取模,所以在用除法的时候要计算逆元. [代码] #include <cstdio> #include <algorithm> #include <

hdu 5142 NPY and FFT(水)

http://acm.hdu.edu.cn/showproblem.php?pid=5142 #include<cstdio> #include<cstring> #include<cmath> #include<iostream> #include<algorithm> using namespace std; int bin[100]; int main() { int t,n,i,j,k; scanf("%d",&

HDU 5145 NPY and girls (莫队分块离线)

题目地址:HDU 5145 莫队真的好神奇..这样的复杂度居然只有n*sqrt(n)... 裸的莫队分块,先离线,然后按左端点分块,按块数作为第一关键字排序,然后按r值作为第二关键字进行排序.都是从小到大,可以证明这样的复杂度只有n*sqrt(n).然后进行块之间的转移. 代码如下: #include <iostream> #include <string.h> #include <math.h> #include <queue> #include <

HDU 5144

题意:在给定的高度和初速度,任意抛使得它水平距离最远. 题解:我们可以很容易的推出 length = v*cos(x)*( sqrt( 2.0*h*g + v*v*sin(x)*sin(x) ) + v*sin(x) ) / g; 然后对 [ 0, π/2 ] 之间的弧度三分查找(凸线图形一般用三分) 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <math.