博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Poj]1905——二分
阅读量:4311 次
发布时间:2019-06-06

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

[题目大意]
         给定一个弓形的弦长和弧长,求弓形弧中点到弦的距离.
[题解]
         对于仅知道弦长和弧长的弓形,我们是没有办法通过数学公式直接取得其半径的.(可能有...但是我不知道) 。这样的话,我们就考虑枚举一个量,使得整个弓形被确认下来.但是,对于实数类的变量,我们没有办法做到快速而又精确地枚举。这时我们就要考虑可不可以找到一个具有单调性的变量,对其进行“二分”——这一特殊的枚举。
         我们观察到,如果弓形的
半角被确定了,那么整个弓形都会被确定.具体的关系非常的简单.

 

        
          alf即为弓形的半角.在弧度表示下,可得L'=L*alf/sin(alf).
          也就是说,L'只与alf这一个变量有关.现在就要在看函数h(x)=x/sin(x)在定义域(0,pai/2)之间的单调性了.
          可以对其求导或是直接用定义证明,不过最简单的就是在区间内随机几个点把函数值打印出来看一看.我在做的时候随便尝试了几个值,发现都是正的.这样可得h(x)是单调递增的,也就是说L'是随着alf的增加而增加的.
          这样我们就得到了一个具有单调性的变量alf,二分即可.

 

 

          同样的道理,本题也可以直接二分答案!
[代码]
ExpandedBlockStart.gif
POJ1905
//
9938816       perseawe        
1905    Accepted        876K    0MS     Pascal  521B    
2012-
03-
17 
21:
10:
01 
Const
  pi=
3.1415926535897932384626433832795;
  eps=
1e-12;
Var
  l,n,c,lp,ll,rr,mid:Extended;
function calc(alf:Extended):extended;
  
begin
    exit(alf*l/sin(alf));
  
end;
Begin
  readln(l,n,c);
  
while 
not((l<
0)
and(n<
0)
and(c<
0)) 
do
    
begin
      lp:=l*(
1+n*c);
      ll:=
0;rr:=pi/
2;
      
repeat
        mid:=(ll+rr)/
2;
        
if calc(mid)<lp 
then ll:=mid 
else rr:=mid;
      
until abs(ll-rr)<Eps;
      writeln((((l/
2)/sin(mid))*(
1-cos(mid))):
0:
3);
      readln(l,n,c);
    
end;
End.
[启发]
         1.二分法的应用要注意在单调性的帮助之下,将枚举转化为二分。

         2.事后,我把h(x)=x/sin(x)在(0,pai)上的图像打印了出来.如图所示,证明我们的猜想是正确的.比赛时要大胆的猜,事后再小心的求证吧...

 

[用时]
         20min
[其他]

转载于:https://www.cnblogs.com/perseawe/archive/2012/03/17/poj1905.html

你可能感兴趣的文章
RecyclerView 源码深入解析——绘制流程、缓存机制、动画等
查看>>
Android 面试题整理总结(一)Java 基础
查看>>
Android 面试题整理总结(二)Java 集合
查看>>
学习笔记_vnpy实战培训day02
查看>>
学习笔记_vnpy实战培训day03
查看>>
VNPY- VnTrader基本使用
查看>>
VNPY - CTA策略模块策略开发
查看>>
VNPY - 事件引擎
查看>>
MongoDB基本语法和操作入门
查看>>
学习笔记_vnpy实战培训day04_作业
查看>>
OCO订单(委托)
查看>>
学习笔记_vnpy实战培训day06
查看>>
回测引擎代码分析流程图
查看>>
Excel 如何制作时间轴
查看>>
matplotlib绘图跳过时间段的处理方案
查看>>
vnpy学习_04回测评价指标的缺陷
查看>>
iOS开发中遇到的问题整理 (一)
查看>>
Linux(SUSE 12)安装jboss4并实现远程访问
查看>>
Neutron在给虚拟机分配网络时,底层是如何实现的?
查看>>
netfilter/iptables全攻略
查看>>