搜索算法3之1005
来源:互联网 发布:网络博客正规吗 编辑:程序博客网 时间:2024/06/05 04:09
1 题目编号:1005
2 题目内容:
10 6 13.5 4<br>10 6 14.5 4<br>
yes<br>no<br>
3 解题思路形成过程:给定X, Y, l, d判断是否能够拐弯。首先当X或者Y小于d,那么一定不能。其次随着角度θ的增大,最大高度h先增长后减小,即为凸函数,可以用三分法来求解。
4 感想:通过这一个题,我的思路又得到了开阔,知道了二分查找与三分搜索的各自适用范围,二分查找其本身仅适用于类似单调函数一类的问题,而如果是凸函数或凹函数时,就应该考虑三分法了;三分搜索法的思路就是若在[a,b]范围内搜索,则与二分查找法类似先取二者中间值为mid,再在[mid,b]之间取中间值为mmid(或再在[a,mid]之间取中间值为mmid亦可),通过比较f(mid)与f(mmid)的大小来缩小范围,剩余部分与二分法相同。
5 代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
const double pi = 3.1415;
const double eps = 1e-4;
double l, x, y, w;
double calu(double a){
return l*cos(a) + (w - x*cos(a)) / sin(a);
}
double ternary_search(double l, double r){
double L, R;
while (r - l>eps){
L = (2 * l + r) / 3;
R = (2 * r + l) / 3;
if (calu(L)>calu(R))
r = R;
else
l = L;
}
return r;
}
int main()
{
while (cin >> x >> y >> l >> w){
double l = 0, r = pi / 2;
double tmp = ternary_search(l, r);
if (calu(tmp) <= y)
puts("yes");
else
puts("no");
}
return 0;
}
- 搜索算法3之1005
- 搜索算法之总结
- 算法之穷竭搜索
- 搜索算法之二分法
- 搜索算法之二分法
- 运动搜索算法之钻石搜索
- 字符串搜索之蛮力搜索算法
- 搜索算法之回溯讲解
- 算法之二分搜索法
- 字符串搜索算法之Sunday
- 路径搜索之A*算法
- 搜索算法1之1002
- 搜索算法2之1008
- 搜索算法4之1004
- 搜索算法5之1003
- 搜索算法6之1011
- 搜索算法7之1013
- 搜索算法8之1014
- 横向滑动类listview 带回弹效果
- win10 Tomcat 启动不了
- 内部类、异常、断言和Loger日志
- 2010 Asia Fuzhou Regional Contest 之 Selecting courses
- 工作感悟之Android系统开发入门
- 搜索算法3之1005
- 小译UnityAPI-OnApplicationFocus,OnApplicationPause,OnApplicationQuit
- SHA1 MD5 BASE64 AES 加密解密
- 非常好用的iOS正则表达式
- win8系统更新后Apache报错
- Android 四大组件(Activity、Service、BroadCastReceiver、ContentProvider)
- iOS小技巧 - 获取文字的宽度(iOS6与iOS7的方法不同)
- 博客第一天
- Cloudera 安装概述