二分贪心 G - 07
2017-05-01 20:27
253 查看
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.
When a thin rod is mounted on two solid walls and then heated, it expands and takes the shape of a circular segment, the original rod being the chord of the segment.
Your task is to compute the distance by which the center of the rod is displaced.
Input
The input contains multiple lines. Each line of input contains three non-negative numbers: the initial lenth of the rod in millimeters, the temperature change in degrees and the coefficient of heat expansion of the material. Input data guarantee that no rod
expands by more than one half of its original length. The last line of input contains three negative numbers and it should not be processed.
Output
For each line of input, output one line with the displacement of the center of the rod in millimeters with 3 digits of precision.
Sample Input
Sample Output
这道题的题意相当于一个圆知道一条切割的弦长跟对应的弧长,然后求这条弦到对应弧最高点的距离。
几何关系如下:sin(a)=l/2/r,a=s/2/r.(a为角度,s为弧长)。然后用二分查找进行求值。
源代码如下:
#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
int main()
{
double l,n,c,s,r,low,high,mid;
while(scanf("%lf%lf%lf",&l,&n,&c)&&l!=-1&&n!=-1&&c!=-1)
{
low=0,high=0.5*l;
s=(1+n*c)*l;
while(high-low>1e-5)
{
mid=(low+high)/2;
r=(4*mid*mid+l*l)/(8*mid);
if(2*r*asin(l/(2*r))<s) low=mid;
else high=mid;
}
printf("%.3f\n",mid);
}
return 0;
}
需要注意的是输入输出要用scanf跟pritnf。循环条件到1e-5即可,再小的话可能就超时了。
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.
When a thin rod is mounted on two solid walls and then heated, it expands and takes the shape of a circular segment, the original rod being the chord of the segment.
Your task is to compute the distance by which the center of the rod is displaced.
Input
The input contains multiple lines. Each line of input contains three non-negative numbers: the initial lenth of the rod in millimeters, the temperature change in degrees and the coefficient of heat expansion of the material. Input data guarantee that no rod
expands by more than one half of its original length. The last line of input contains three negative numbers and it should not be processed.
Output
For each line of input, output one line with the displacement of the center of the rod in millimeters with 3 digits of precision.
Sample Input
1000 100 0.0001 15000 10 0.00006 10 0 0.001 -1 -1 -1
Sample Output
61.329 225.020 0.000
这道题的题意相当于一个圆知道一条切割的弦长跟对应的弧长,然后求这条弦到对应弧最高点的距离。
几何关系如下:sin(a)=l/2/r,a=s/2/r.(a为角度,s为弧长)。然后用二分查找进行求值。
源代码如下:
#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;
int main()
{
double l,n,c,s,r,low,high,mid;
while(scanf("%lf%lf%lf",&l,&n,&c)&&l!=-1&&n!=-1&&c!=-1)
{
low=0,high=0.5*l;
s=(1+n*c)*l;
while(high-low>1e-5)
{
mid=(low+high)/2;
r=(4*mid*mid+l*l)/(8*mid);
if(2*r*asin(l/(2*r))<s) low=mid;
else high=mid;
}
printf("%.3f\n",mid);
}
return 0;
}
需要注意的是输入输出要用scanf跟pritnf。循环条件到1e-5即可,再小的话可能就超时了。
相关文章推荐
- 二分贪心--07
- 【二分答案+贪心】UVa 1335 - Beijing Guards
- 二分枚举 +贪心 NOJ 680 摘枇杷
- poj 3273 Monthly Expense(二分+贪心)
- soj2574: pie_贪心+二分
- hdu 5493 Queue 2015合肥网络赛 树状数组 二分 离散化 贪心
- 列车调度(贪心+二分)
- NYOJ 914 Yougth的最大化 【贪心】+【二分】
- 九度OJ 1533 最长上升子序列 (基于贪心和二分查找)
- UVa 714 Copying Books 二分 + 贪心 (最大值最小化问题)
- 【贪心专题】POJ 2456 Aggressive cows && NYOJ 586 疯牛(最大化最小值 贪心+二分搜索)
- LA 4254 Processor 贪心+二分 *
- codeforce 589F(二分 +(贪心 or 网络流))
- [BZOJ2097][Usaco2010 Dec]Exercise 奶牛健美操(二分+树形dp+贪心)
- 二分与贪心-誊写书籍(算法基础 第9周)
- codeforces732D Exams(贪心+二分)
- 【bzoj2083/Poi2010】Intelligence test——二分+贪心
- [Coursera]算法基础_Week8_二分与贪心_Q1
- CodeForces-729C-Road to Cinema(二分查找 贪心 排序)
- 【HDU】5248-序列变换(贪心+二分)