博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 1905 Expanding Rods 二分答案
阅读量:6660 次
发布时间:2019-06-25

本文共 1041 字,大约阅读时间需要 3 分钟。

题目地址: 

思路: 

列出方程 2*R*x=L‘

                 2*R*sin(x)=L

                两式相除即得 x/sin(x)  = 1+n*c    前提x!=0   就是 n*c>0  

               答案就是 L/2* (1/sin(x)-1/tan(x))       三角函数化简为 L/2*tan(x/2)   x  在0~ PI/2   于是关于x是单增的, 反函数也是单增的,x/sin(x) 也是单增的

一开始的思路是先用 二分把 x/sin(x)  = 1+n*c  里面的x解出来,然后带进 L/2*tan(x/2) 计算  虽然样例过了,但是还是wa,看来是精度问题。

所以直接二分答案,ans= L/2*tan(x/2)    =>  x=2*arctan(ans*2/L)  这个关于ans是单增的,带进 x/sin(x)  也是单增的 可以二分了  

代码:

#include
#include
#include
const long double PI=acos(-1.0);long double L,n,c;long double f(long double x){ double xx=2*atan(2*x/L); return xx/sin(xx);}using namespace std;int main(){ long double l,r,mid; while(cin>>L>>n>>c) { if(L==-1) break; l=0; //r=PI/2; r=L; double ans; if(n*c>0) { while(r-l>1e-4) { mid=(l+r)/2; if(f(mid)>1+n*c) r=mid; else l=mid; } //ans=1.0/sin(l)-1.0/tan(l); ans=l; } else ans=0; printf("%.3lf\n",ans); }}

    

转载于:https://www.cnblogs.com/814jingqi/p/3339247.html

你可能感兴趣的文章
安卓一键刷ji教程_ROOT教程_中文recovery分享
查看>>
详解Spring框架的核心思想之IOC
查看>>
eyoucms weapp 网站应用插件标签
查看>>
2018年高薪JAVA工程师必备技术解密
查看>>
html
查看>>
Photoshop学习成长之路
查看>>
“别更新了,学不动了” 之:全栈开发者 2019 应该学些什么?
查看>>
Java架构师必须掌握的七大知识点
查看>>
jQuery easyui官方文档翻译 - 基础总览
查看>>
七牛云 mac qshell 下载资源和上传资源
查看>>
Python的模块和时间模块的使用
查看>>
DNS记录类型介绍(A记录、MX记录、NS记录等)
查看>>
【11】Java中的volatile关键字
查看>>
我的友情链接
查看>>
关于ArrayList
查看>>
大度做人十锦囊
查看>>
hibernate操作数据库总结
查看>>
Linux运维面试题解答
查看>>
python切换.xinitrc替换窗口管理器
查看>>
ztree+jsp实现的节点新增、修改、删除图标,以及提醒、jajx保存,还可以节点拖动...
查看>>