搜索—二分三分搜索—1004
2016-04-21 08:50
363 查看
这
4000
个题主要是一个公式的推导还有二分法和三分法的综合运用。。
思路:先三分出一个角度,让抛物线在x=x0出的y取得最大值。然后再到这个y一下去二分一个合适的值。
代码:
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#define PI acos(-1.0)
#define G 9.8
#define eps 1e-12
using namespace std;
double X,Y,v,sita;
double cal(double x)
{
double t;
t=X/(v*cos(x));
return v*sin(x)*t-0.5*G*t*t;
}
double triplediv()
{
int i;
double mid1,mid2,left,right,h1,h2;
left=0,right=0.5*PI;
for(i=1;i<=100;i++)
{
mid1=(2*left+right)/3;
mid2=(left+2*right)/3;
h1=cal(mid1);
h2=cal(mid2);
if(h1>h2)
{
right=mid2;
}
else
{
left=mid1;
}
}
sita=left;
return cal(left);
}
void doublediv(double maxy)
{
int i;
double left,right,mid,h;
left=0,right=sita;
for(i=1;i<=100;i++)
{
mid=(left+right)/2;
h=cal(mid);
if(h>Y)
right=mid;
else
left=mid;
}
printf("%.6lf\n",left);
}
int main()
{
int t;
double maxy;
scanf("%d",&t);
while(t--)
{
scanf("%lf%lf%lf",&X,&Y,&v);
maxy=triplediv();
if(maxy<Y)
printf("-1\n");
else
doublediv(maxy);
}
return 0;
}
4000
个题主要是一个公式的推导还有二分法和三分法的综合运用。。
思路:先三分出一个角度,让抛物线在x=x0出的y取得最大值。然后再到这个y一下去二分一个合适的值。
代码:
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#define PI acos(-1.0)
#define G 9.8
#define eps 1e-12
using namespace std;
double X,Y,v,sita;
double cal(double x)
{
double t;
t=X/(v*cos(x));
return v*sin(x)*t-0.5*G*t*t;
}
double triplediv()
{
int i;
double mid1,mid2,left,right,h1,h2;
left=0,right=0.5*PI;
for(i=1;i<=100;i++)
{
mid1=(2*left+right)/3;
mid2=(left+2*right)/3;
h1=cal(mid1);
h2=cal(mid2);
if(h1>h2)
{
right=mid2;
}
else
{
left=mid1;
}
}
sita=left;
return cal(left);
}
void doublediv(double maxy)
{
int i;
double left,right,mid,h;
left=0,right=sita;
for(i=1;i<=100;i++)
{
mid=(left+right)/2;
h=cal(mid);
if(h>Y)
right=mid;
else
left=mid;
}
printf("%.6lf\n",left);
}
int main()
{
int t;
double maxy;
scanf("%d",&t);
while(t--)
{
scanf("%lf%lf%lf",&X,&Y,&v);
maxy=triplediv();
if(maxy<Y)
printf("-1\n");
else
doublediv(maxy);
}
return 0;
}
相关文章推荐
- Velocity教程
- Android SharedPreferences详解
- TestNG 学习总结 - 依赖测试(十一)
- 面试经历
- 第七周项目2-友元类
- 如何阅读一本书(10)
- c# MyXls 导出excel文件
- [hdu 5532] [2015ACM/ICPC亚洲区长春站 ] Almost Sorted Array 最长不下降子序列
- C++实验4-求1000以内所有偶数的和
- 第四次上机实验报告
- js实现的省市联动
- android基础---->音频和视频的使用
- 053(四十)
- 第十二章 、Bitmap的加载和Cache
- java 生成pdf文档
- 有关QTimer线程安全的探讨
- LeetCode|Implement Stack using Queues
- 053(三十九)
- 第十一章、Android的线程和线程池
- 第七周项目1-成员函数、友元函数和一般函数有区别