hdu 4033 Reglar Polygon(二分)+++++

1823 ワード

<a href="http://acm.hdu.edu.cn/showproblem.php?pid=4033">http://acm.hdu.edu.cn/showproblem.php?pid=4033</a> 



  :    

            max          min       L    min<l<max 

        

    ,      eps   e-6,wa   e-8 ac 

 

#include<stdio.h>

#define N 1000

#include<math.h>

#define eps 1e-8

const double pi=2*acos(-1);

double a[N];

int main()

{

    int T,l,i,n;

    scanf("%d",&T);

    for(l=1;l<=T;l++)

    {

        scanf("%d",&n);

        for(i=1;i<=n;i++)

          scanf("%lf",&a[i]);

          a[n+1]=a[1];

          double min=-1,max=9999999;

          for(i=1;i<=n;i++)

          {

              double  temp=a[i]+a[i+1];

              if(max>temp)max=temp;

              temp=fabs(a[i]-a[i+1]);

              if(min<temp)min=temp;

              //printf("%lf %lf  12122
",min,max); } int f=0; double mid; while(max-min>eps) { mid=(min+max)/2; double sum=0; for(i=1;i<=n;i++) { sum+=acos((a[i]*a[i]+a[i+1]*a[i+1]-mid*mid)/(2*a[i]*a[i+1])); } //printf("%lf %lf
",sum,pi); if(fabs(pi-sum)<=eps) { f=1; break; } else if(sum-pi>eps) { max=mid; } else if(pi-sum>eps) { min=mid; } } if(f)printf("Case %d: %.3lf
",l,mid); else printf("Case %d: impossible
",l); } }