Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
需要一些优化In Reply To:穷举所有的N个点吗?然后算出其他的点和它的角度,按角度排序,我还是超时……(代码在内,如何进一步优化) Posted by:zerocool_08 at 2006-03-24 18:41:43 把点按坐标排一下序,只枚举一个点和它右边的点 > #include "stdio.h" > #include "stdlib.h" > #include "math.h" > #define INF 1000000 > int x[1000],y[1000],n; > double agr[1000]; > int cmp(const void *p1,const void *p2){ > if(*(double *)p1 > *(double *)p2) > return 1; > return -1; > } > int dfs(int k){ > int i,j,now,max; > double val; > for(i=0,j=0;i<n;i++){ > if(i!=k){ > if(x[i]==x[k]) > agr[j++]=INF; > else > agr[j++]=(double)(y[k]-y[i])/(x[k]-x[i]); > } > } > qsort(agr,n-1,sizeof(double),cmp); > now=1,max=0,val=agr[0]; > for( i=1;i<n-1;i++){ > if(fabs(val-agr[i])<0.000001) > now++; > else{ > max=max>now? max:now; > now=1; > val=agr[i]; > } > } > if(max<now) max=now; > return max; > } > > > int main(void) > { > int cs=1,i,max,now; > // freopen("in.txt","r",stdin); > // freopen("out.txt","w",stdout); > while( scanf("%d",&n)==1&&n){ > for(i=0;i<n;i++) > scanf("%d %d",&x[i],&y[i]); > > for(i=0,max=0;i<n;i++){ > now=dfs(i); > max=max>now? max:now; > } > max++; > if(max<4) max=0; > printf("Photo %d: %d points eliminated\n",cs++,max); > } > return 0; > } > Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator