| ||||||||||
| 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 | |||||||||
穷举所有的N个点吗?然后算出其他的点和它的角度,按角度排序,我还是超时……(代码在内,如何进一步优化)In Reply To:极角排序,O(n^2lgn) Posted by:frkstyc at 2006-03-24 17:05:23 #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