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 }