今天的成都区域赛又悲剧了,通过这三次的区域赛,让我深深的感觉到了我们与别的队的差距。努力了三场,连区预赛都进不了,何况是今年的湖南省省赛呢。那么多前面的队伍在,让我感受到了深深的挫败感啊!今年想拿省赛的一等奖看来是没有希望了,对不起郭神牛了,他的最后一次比赛不能让他圆梦了。真是伤心啊。
今天的二分题,我很早就出思路了,只可惜一直都在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 );elseprintf( "Case %d: impossible\n",index++ );}return 0;
}