| ||||||||||
| 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