HDU 4033
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 4033相关的知识,希望对你有一定的参考价值。
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的主要内容,如果未能解决你的问题,请参考以下文章