【POJ1905】Expanding Rods 二分答案+推公式

题意:

给出L,n,c,通过公式可以得到L’。

然后L是弦长,L’是弧长,从圆心向该弦做垂线,若长为d,求半径-d。

题解:

二分答案。

首先弧长通过圆心角和半径是可以计算的,那么我们可以二分答案(r-d)。

然后有(r-mid)^2+(L/2)^2=r*r,通过这个可以O(1)算出r。

这样就可以通过 弧长=(圆心角/360°)*2πr计算出当前弧长进行check。

因为arcsin返回值为弧度,即(180/π)度,所以最后弧长公式是2*r*asin(L/(2*r))。

代码:

#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;

const double eps=1e-12;

int main(void)
{
//	freopen("test.in","r",stdin);
	double L,n,c,s;
	double h;
	double r;

	while(scanf("%lf%lf%lf",&L,&n,&c),L+1||n+1||c+1)
	{
		double a=0.0,b=0.5*L,mid;
		s=(1+n*c)*L;
		for(int i=1;i<=1000;i++)
		{
			mid=(a+b)/2;
			r=(4*mid*mid+L*L)/(8*mid);
			if( 2*r*asin(L/(2*r)) < s )a=mid;
			else b=mid;
		}
		h=mid;
		printf("%.3lf\n",h);
	}
	return 0;
}
时间: 2024-10-22 03:54:53

【POJ1905】Expanding Rods 二分答案+推公式的相关文章

poj1905 Expanding Rods 二分

Expanding Rods Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 11782   Accepted: 3063 Description When a thin rod of length L is heated n degrees, it expands to a new length L'=(1+n*C)*L, where C is the coefficient of heat expansion. Whe

POJ1905 expanding rods 【水二分+谜之WA】

一道很水的题,就是不知道为什么wa,,, 其实小优那个精度控制循环控制二分的方法不算好,如果esp太小,会TLE,直接人工控制次数最好了 #include <cstdio> #include <cmath> #include <iostream> using namespace std; double getres(double r,double s,double l) { //cout<<(r-s/acos(1-l*l/(2.0*r*r)))<<

poj1905 Expanding Rods(二分)

题目链接:https://vjudge.net/problem/POJ-1905 题意:有一根长len的木棍,加热了n度,长度会膨胀为len*(1+n*c),c为膨胀系数.现在把这根木棍夹在两堵墙之间,木棍会向上弯曲变成弧形,求弧形中点和原木棍中点的高度差. 思路:刚开始以为是几何题,几何肯定是能做的.然后发现题解是二分,第一次二分double类的变量,学到了.设所求答案为dis,通过dis可以勾骨出半径R,然后求出弧长L,再比较L与真实弧长len.显然dis和L满足二分的单调性,那么就可以做了

POJ 1905 Expanding Rods (二分+计算几何+精度处理)

题目地址:POJ 1905 用二分枚举h,然后判断弧长是否符合条件.重点还是在精度问题上,具体看代码吧.. #include <iostream> #include <string.h> #include <math.h> #include <queue> #include <algorithm> #include <stdlib.h> #include <map> #include <set> #includ

POJ 1905 Expanding Rods#二分

http://poj.org/problem?id=1905 题意:将一条直线变成一条弧线(该弧线是圆的一部分),求中心位置发生的位移. 由于精度需要控制好,所以选择用圆半径作为二分的目标,l=0,r=INF,LL为弧线长度,根据半径mid以及弦长L,可以求出对应的弧线长度t=2*asin(0.5*L/mid)*mid,再与LL比较,若t<LL,说明半径取大了,故r=mid,继续二分. #include<iostream> #include<cstdio> #include&

UVA 10668 - Expanding Rods(数学+二分)

UVA 10668 - Expanding Rods 题目链接 题意:给定一个铁棒,如图中加热会变成一段圆弧,长度为L′=(1+nc)l,问这时和原来位置的高度之差 思路:画一下图可以很容易推出公式,设圆弧扇形部弧度r,那么可以计算出铁棒长度为lr/sin(r)这个公式在[0, pi/2]是单调递增的,所以可以用二分法去求解 要注意的一点是最后答案计算过程中带入mid,之前是带入x(二分的左边值),可实际上x是可能等于0的,而带入mid,由于是double型,所以mid实际上表示是一个非常趋近0

POJ 1905 Expanding Rods 浮点数二分

Expanding Rods Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 11145   Accepted: 2879 Description When a thin rod of length L is heated n degrees, it expands to a new length L'=(1+n*C)*L, where C is the coefficient of heat expansion. Whe

poj 1905 Expanding Rods (数学 计算方法 二分)

题目链接 题意:将长度为L的棒子卡在墙壁之间.现在因为某种原因,木棒变长了,因为还在墙壁之间,所以弯成了一个弧度,现在求的是弧的最高处与木棒原先的地方的最大距离. 分析: 下面的分析是网上别人的分析: 设弦长为L0(即原长),弧长为L1=(1+n*C)*l0,目标值为h,半径为R,弧所对圆心角为2θ(弧度制).可以得到以下方程组:圆的弧长公式:L1=2θR三角函数公式:L0=2*R*sinθ,变换得θ=arcsin(L0/(2*R))勾股定理:R^2=(R-h)^2+(0.5*L0)^2,变换得

POJ 题目1905 Expanding Rods(二分,数学几何)

Expanding Rods Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 12827   Accepted: 3311 Description When a thin rod of length L is heated n degrees, it expands to a new length L'=(1+n*C)*L, where C is the coefficient of heat expansion. Whe