首页 > 代码库 > HDU 4033
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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。