码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 1905(集训比赛2B_A题)解题报告

时间:2018-01-26 11:10:38      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:膨胀   oid   bsp   长度   problem   src   int   none   roc   

题目链接:http://poj.org/problem?id=1905

---------------------------------------------------------

题意:一个线段,给出长度、加热温度及热膨胀系数,线段加热后变为圆弧的一部分,要求求弧顶长度为多少。

思路:简单的画一下图,发现几何关系还是比较明确的,但是发现x的数学表达式并不容易解出来,所以采用二分法求值的方法。选择二分的对象很重要,直接选择对要求的x进行二分,避免角度误差太大。

代码:

技术分享图片
#include <cstdio>
#include <cmath>
double L =0;
double n=0;
double C=0;

const double PI =acos(-1.0);
const double eps=1e-8;

int jud(double mid){
    if((2*asin((0.5*L)/((L*L+4*mid*mid)/(8*mid)))*(L*L+4*mid*mid)/(8*mid))>=(1+n*C)*L)    return 0;    
    else return  1;
}
double proce(){
    double left =0;
    double right=L/2;
    double mid;
    while(right-left>eps){
        mid = (left+right)/2;
        if (jud(mid)){
            left = mid;
        }else{
            right =mid;
        }
    }
    return mid;
}

int main(void){
    while(~scanf("%lf %lf %lf",&L,&n,&C)){
        if(L==-1&&n==-1&C==-1) break;
        else{
            double h = proce();
            printf("%.3f\n",h);
        }
    }
    return 0;
}
View Code

 

POJ 1905(集训比赛2B_A题)解题报告

标签:膨胀   oid   bsp   长度   problem   src   int   none   roc   

原文地址:https://www.cnblogs.com/caomingpei/p/8358032.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!