今天的成都区域赛又悲剧了,通过这三次的区域赛,让我深深的感觉到了我们与别的队的差距。努力了三场,连区预赛都进不了,何况是今年的湖南省省赛呢。那么多前面的队伍在,让我感受到了深深的挫败感啊!今年想拿省赛的一等奖看来是没有希望了,对不起郭神牛了,他的最后一次比赛不能让他圆梦了。真是伤心啊。
今天的二分题,我很早就出思路了,只可惜一直都在WA,不然的话成绩会好很多吧。两个小时能做出3个题的。后面两个小时大家加把油,4个题还是可以的。可惜了。我的1003这个程序直到比赛最后也没有弄出来,比赛的最后一次提交没有交上去,否则这个题还是可以过的。所以以后千万不能丧失信心,要奋战到底不罢休!!
这个题用二分,二分边长,然后会得出内角和。内角和为二分的标准。就是这样。不过我的二分还是有很多漏洞,对于impossible的情况判断简直是2B了!卡死卡死卡死!!最后面的2PI和内角和的判断没有想到竟然是这种情况,可能是acos的得精度问题吧!边的精度和角的精度不一样,卡死卡死了!
#include<iostream>
#include<cmath>
#define PI acos(-1.0)
#define eps 1e-6
#define MAXN 101
using namespace std;
int main()
{
int index=1;
double date[101];
int T,n;
scanf( "%d",&T );
while( T-- )
{
int i;
int cnt=0;
memset( date,0,sizeof(date) );
double max,min;
min=100000000000ll;
max=0;
scanf( "%d",&n );
for( i=0;i<n;i++ )
{
scanf( "%lf",&date[i] );
if( date[i]==0 )
date[i]=eps/10;
}
for( i=0;i<n;i++ )
{
if( max<fabs( date[i]-date[(i+1+n)%n]) )
max=fabs( date[i]-date[(i+1+n)%n]);
if( min>date[i]+date[(i+1+n)%n] )
min=date[i]+date[(i+1+n)%n];
}
//printf( "min:%lf max:%lf\n",min,max );
double L=max;
double R=min;
if( L>R )
{
printf( "Case %d: impossible\n",index++ );
continue;
}
double m;
double arc=0;
while( !(fabs(R-L)<eps) )
{
m=(L+R)/2;
arc=0;
for( i=0;i<n;i++ )
arc+=acos( (date[i]*date[i]+date[(i+1)%n]*date[(i+1)%n]-m*m)/(2*date[i]*date[(i+1)%n]) );
if( arc>=2*PI ) R=m;
else L=m;
}
//printf( "%lf\n",arc );
//printf( "%lf\n",2*PI );
if( fabs(arc-2*PI)<eps*10 )
printf( "Case %d: %.3lf\n",index++,m );
else
printf( "Case %d: impossible\n",index++ );
}
return 0;
}