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

原创 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)));
}























【openjudge】派 二分查找

05:派总时间限制: 1000ms 内存限制: 65536kB 描述 我的生日要到了!根据习俗,我需要将一些派分给大家。我有N个不同口味、不同大小的派。有F个朋友会来参加我的派对,每个人会拿到一块...
  • zhhe0101
  • zhhe0101
  • 2016年10月14日 20:39
  • 234

09:膨胀的木棍

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

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

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

【二分查找】[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
  • 1165

Java版 二分查找

一、算法介绍 折半查找(搜索)、二分查找(搜索)           已经排序的数据(假如是从左向右依次递增),取出中间数与查找值比较      如果中间值大于查找值,应该再次向左侧查找,因为左侧都...
  • love_world_
  • love_world_
  • 2014年01月05日 14:09
  • 1600

二分查找算法及其变种

前言二分查找算法也称为折半查找算法,是一种在查找算法中普遍使用的算法。其算法的基本思想是:在有序表中,取中间的记录作为比较关键字,若给定值与中间记录的关键字相等,则查找成功;若给定的值小于中间记录的关...
  • u011116672
  • u011116672
  • 2015年12月06日 16:43
  • 2413

二分查找各种情况大总结

二分查找多次刷题时遇到,虽然每次也能写对,但花了蛮多时间,没好好想过。而且网上的太多版本,并不是很简洁,而且边界条件变化情况太多,容易混淆,下面是自己对二分查找的一些思考和总结,尽量写得简单易懂。 ...
  • yefengzhichen
  • yefengzhichen
  • 2016年08月30日 21:40
  • 11780

二分查找法的实例分析

二分查找:折半查找,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如                     果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,...
  • clown05
  • clown05
  • 2016年05月30日 00:56
  • 1846

数据结构之二分查找树

二分查找树(也叫二叉查找树、二叉排序树)的提出是为了提供查找效率,之所以称为二分查找树,因为该二叉树对应着二分查找算法,查找平均的时间复杂度为o(logn),所以该数据结构的提出是为了提高查找效率。...
  • JXH_123
  • JXH_123
  • 2014年07月02日 20:52
  • 2288

[经典面试题]二分查找问题汇总

【题目】 给定一个有序(非降序)数组A,可含有重复元素,求最小的i使得A[i]等于target,不存在则返回-1。 【分析】 此题也就是求target在数组中第一次出现的位置。这里可能会有人想先直接...
  • SunnyYoona
  • SunnyYoona
  • 2015年01月05日 12:16
  • 3299
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:二分查找---膨胀的木棍
举报原因:
原因补充:

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