您的位置:首页 > 其它

HDOJ 5144 NPY and shot(三分)

2014-12-15 09:01 337 查看
原函数为单峰函数,所以不能用二分。

#include <algorithm>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
using namespace std;

const double pi = acos(-1.0);
const double g = 9.8;

double h, v, l, r, ml, mr, k;

double f(double ang)
{
double a = -g / 2, b = v * sin(ang), c = h;
double d = sqrt(b * b - 4 * a * c);
double t = -(b + d) / (2 * a);
return cos(ang) * v * t;
}

int main()
{
// freopen("C.in", "r", stdin);

int T;
scanf("%d", &T);
while(T--)
{
scanf("%lf%lf", &h, &v);
l = 0, r = pi/2;
for(int i = 0; i < 60; i++)
{
k = (r - l) / 3;
ml = l + k, mr = r - k;
if (f(ml) < f(mr)) l = ml;
else r = mr;
}
printf("%.2lf\n", f(l));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: