二分查找---膨胀的木棍

原创 2017年12月09日 21:57:46
问题描述:
当长度为L的一根细木棍的温度升高n度,它会膨胀到新的长度L'=(1+n*C)*L,其中C是热膨胀系数。
当一根细木棍被嵌在两堵墙之间被加热,它将膨胀形成弓形的弧,而这个弓形的弦恰好是未加热前木棍的原始位置。
你的任务是计算木棍中心的偏移距离。

输入
三个非负实数:木棍初始长度(单位:毫米),温度变化(单位:度),以及材料的热膨胀系数。
保证木棍不会膨胀到超过原始长度的1.5倍。
输出
木棍中心的偏移距离(单位:毫米),保留到小数点后第三位。
样例输入
1000 100 0.0001
样例输出
61.329
问题分析:
由数学内容可知弧长和弦长有关,f(L) = 2rarcsin(L/2r) f(L)表示弦长,L表示弧长。我们可以通过枚举r,寻找能满足上述关系的r,我们知道r的下限是L/2,但是如何确定r的上限。arcsin(L/2r)随r的增大而减小,2r却在增大,所以整个函数的增减性不容易判断。故r的上限无法确定,也就没法办用二分查找。
此时,我们把关注点转向夹角,假设圆心角的度数为a,则有
2sin(a/2)/L*a = f(L),显然当a处于[0,pi]时,左侧函数递增,即左侧函数的函数值随a的增大而增大,那么他必然会和f(L)产生交汇点。这时就可以用折半查找来确定a的解,而a的上下限就是[0,pi]。

过程分析:
2sin(a/2)/L*a = f(L) (1)
这个题最大的亮点是不断的尝试a,让等式(1)的两边不断接近,求得最终a的取值,而不是想尽办法数学公式把a表示出来,然后代入求解。
参考答案:
#include<math.h>
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
double L,La,n,C;
cin>>L>>n>>C;
La = (1+n*C)*L;
double l = 0, r = acos(-1),d,temp;
while(r-l>1e-12)#必须是这个精度,否则提交不了
{
//cout<<" ha "<<endl;
d = (r+l)/2;
temp = d*L/2/sin(d/2);
if(temp>=La)
r = d-1e-12;
else
l = d+1e-12;
//cout<<temp-La<<endl;

}
printf("%.3f",L/2/sin(d/2)*(1-cos(d/2)));
}























数据结构基础系列(8):查找

数据结构课程是计算机类专业的专业基础课程,在IT人才培养中,起着重要的作用。课程按照大学计算机类专业课程大纲的要求,安排教学内容,满足需要系统学习数据结构的人。系列课程包含11个部分,本课为第8部分查找,介绍查找的基本概念,重点是线性表上顺序查找、二分查找和分块查找,二叉排序树、AVL树和B-树的各种树表,以及哈希表查找。
  • 2015年11月16日 15:26

【二分查找】[Openjudge noi 1.11 09]膨胀的木棍

题目描述: 当长度为L的一根细木棍的温度升高n度,它会膨胀到新的长度=(1+n×C)×L=(1+n\times C)\times L,其中C是热膨胀系数。 当一根细木棍被嵌在两堵墙之间被加热,它将...
  • JeremyGJY
  • JeremyGJY
  • 2015-11-06 19:43:00
  • 1315

OpenJudge 1.11-09膨胀的木棍——题解

(日常水题系列)上回(很久以前那个)说到,勇者最终还是走出山洞,但是却在山间迷路了。 现在,勇者一行人找到了一座桥,并且得知走过这桥大概就能走下这座山,但这桥吧不太结实,受到风吹日晒雨淋的就会膨胀收...
  • luyouqi233
  • luyouqi233
  • 2017-05-12 21:37:54
  • 138

Openjudge 1.11 09:膨胀的木棍

09:膨胀的木棍 描述 当长度为L的一根细木棍的温度升高n度,它会膨胀到新的长度L'=(1+n*C)*L,其中C是热膨胀系数。 当一根细木棍被嵌在两堵墙之间被加热,它将膨胀形...
  • C20192419MYS
  • C20192419MYS
  • 2017-05-09 12:50:17
  • 396

POJ 1905 Expanding Rods 木棍膨胀

描述 当长度为L的一根细木棍的温度升高n度,它会膨胀到新的长度L'=(1+n*C)*L,其中C是热膨胀系数。 当一根细木棍被嵌在两堵墙之间被加热,它将膨胀形成弓形的弧,而这个弓形的弦恰好是...
  • txl16211
  • txl16211
  • 2015-10-22 13:34:07
  • 1473

09:膨胀的木棍

总时间限制: 1000ms 内存限制: 65536kB 描述 当长度为L的一根细木棍的温度升高n度,它会膨胀到新的长度L'=(1+n*C)*L,其中C是热膨胀系数。 当一根细木棍被嵌...
  • qq_38627803
  • qq_38627803
  • 2017-05-20 20:03:42
  • 199

膨胀的木棍

总时间限制: 1000ms内存限制: 65536kB 描述 当长度为L的一根细木棍的温度升高n度,它会膨胀到新的长度L'=(1+n*C)*L,其中C是热膨胀系数。 当一根细木棍被嵌在两堵墙之间被...
  • xhk2000
  • xhk2000
  • 2016-08-29 10:29:50
  • 457

洛谷 【P1120】 小木棍

P1120 小木棍 传送门 标签搜索/枚举 难度普及+/提高 通过/提交255/1689 提交该题 讨论 题解 记录 题目描述 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到...
  • WhiStLenA
  • WhiStLenA
  • 2016-06-07 21:01:04
  • 1406

Uva 10003 切木棍(dp)

You have to cut a wood stick into pieces. The most affordable company, The Analog Cutting Machinery,...
  • baidu_33153085
  • baidu_33153085
  • 2016-08-10 14:12:43
  • 697

10003木棍切割问题

原题详见UVa10003 本文主要包含一下内容: 1.数学模型的建立 2.递推伪代码的推导 3.程序实现 4.总结 关键字: 动态规划     集合 1.数学模型的建立 ...
  • bujuan827
  • bujuan827
  • 2016-08-11 20:51:34
  • 831
收藏助手
不良信息举报
您举报文章:二分查找---膨胀的木棍
举报原因:
原因补充:

(最多只允许输入30个字)