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

HDU 4033

时间:2017-03-01 19:50:55      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:余弦定理   cst   main   possible   ase   scanf   include   pre   ora   

 1 /*
 2 http://acm.hdu.edu.cn/showproblem.php?pid=4033
 3 题意:正n边形里面有一个点,知道这个点到n个顶点的距离,要求这个正多边形的边长
 4 思路:在(0,20000)二分查找答案,用上余弦定理
 5 2017年02月26日19:38:14
 6 */
 7 #include <cstdio>
 8 #include <cmath>
 9 double len[110];
10 int n;
11 double pi=acos(-1.0)*2;
12 double ef(double l,double r){
13     if(r-l<1e-6)return -1;
14     double m=(l+r)/2;
15     double du=0;
16     for(int i=0;i<n;i++){
17         if(m>len[i]+len[(i+1)%n])return ef(l,m);
18         du+=acos((-m*m+len[i]*len[i]+len[(i+1)%n]*len[(i+1)%n])/(2.0*len[i]*len[(i+1)%n]));
19     }
20     if(du>pi){
21         if(m-l<1e-6 && du-pi<1e-5 && pi-du<1e-5)return l;
22         return ef(l,m);
23     }else{
24         if(r-m<1e-6 && du-pi<1e-5 && pi-du<1e-5)return l;
25         return ef(m,r);
26     }
27 }
28 int main(){
29     int t;
30     scanf("%d",&t);
31     for(int tt=1;tt<=t;tt++){
32         scanf("%d",&n);
33         for(int i=0;i<n;i++){
34             scanf("%lf",&len[i]);
35         }
36         double res=ef(0,20000);
37         printf("Case %d: ",tt);
38         if(res<0){
39             printf("impossible\n");
40         }else{
41             printf("%.3f\n",res);
42         }
43     }
44     return 0;
45 }

 

HDU 4033

标签:余弦定理   cst   main   possible   ase   scanf   include   pre   ora   

原文地址:http://www.cnblogs.com/boom-monster/p/6485770.html

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