| ||||||||||
| 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 | |||||||||
提交了五十次,终于过了, 这题提交了用马甲提交了近五十次,终于过了,发个贴庆祝一下
这题我一共用了两种方法:
第一种思路:对A,B,C三点,若直线AB,AC斜率相同,则A、B、C三点必共线,但最终这种方法我是一直WA,估计是精度问题
第二种思路:对A,B,C三点,求出向量AB、AC的坐标,并且对AB、AC的坐标均约分成最简形式,此时若AB、AC的坐标相同,则A、B、C三点必共线,在判断AB、AC坐标是否相同时要用到哈希
最后直得注意的一点是,输入时记得处理负数的情况,我因为没处理WA了三十多次,
我第一种思路的代码如下,一直WA,不知错在哪里(也许是精度问题),希望牛人给予指点:
# include <stdio.h>
# include <string.h>
double d[1001][1001];
double abs(double a)
{
if(a<0)a=-a;
return a;
}
void merge(double *a,int p,int q,int r)
{
int n1,n2,i,j,k;
double l[1001],r1[1001];
n1=q-p+1;
n2=r-q;
for(i=0;i<n1;i++)
l[i]=a[p+i];
for(i=0;i<n2;i++)
r1[i]=a[q+1+i];
r1[n2]=l[n1]=100000011;
i=j=0;
for(k=p;k<=r;k++)
{
if(l[i]<=r1[j])
{
a[k]=l[i];
i++;
}
else
{
a[k]=r1[j];
j++;
}
}
}
void mergesort(double *a,int p,int r)
{
int q;
if(p<r)
{
q=(p+r)/2;
mergesort(a,p,q);
mergesort(a,q+1,r);
merge(a,p,q,r);
}
}
int main()
{
char a[10],b[10];
int i,j,N=1,p[1001][2],k,n,flag,count,max;//p[i][0]表示点i的横坐标
//p[i][1]表示点i的纵坐标
while(N++)
{
k=0;
while(1)
{
scanf("%s",a);
if(a[0]=='-'&&a[1]=='-')
{
if(flag==1)
flag=2;
else flag=1;
break;
}
flag=0;
scanf("%s",b);
for(i=0,n=0;i<strlen(a);i++)
{
if(i==0&&a[i]=='-')continue;
n+=10*n+a[i]-'0';
}
if(a[0]=='-') n=-n;
p[k][0]=n;
for(i=0,n=0;i<strlen(b);i++)
{
if(i==0&&b[i]=='-')continue;
n+=10*n+b[i]-'0';
}
if(b[0]=='-') n=-n;
p[k][1]=n;
k++;
}
if(flag==2)
break;
for(i=0;i<k;i++)//d[i][j]表示点i、j之间直线的斜率
for(j=0;j<k;j++)
{
if(i==j)
d[i][j]=-134215321;//做"哨兵"
else if(p[i][0]==p[j][0])
d[i][j]=d[j][i]=123445478;//此时斜率不存在,此斜率用特殊值表示
else
d[i][j]=(p[i][1]-p[j][1])/(double)(p[i][0]-p[j][0]);
}
max=0;
for(i=0;i<k;i++)
{
mergesort(d[i],0,k-1);//用过qsort,但一直超时
count=1;
for(j=1;j<=k+1;j++)//因为d[i][i]的值最小,总会出现在首位位,所以j从1开始取傎
{
if(abs(d[i][j]-d[i][j-1])<0.0000001)
count++;
else
{
if(count>max)
max=count;
count=1;
}
}
}
printf("%d. %d\n",N-1,max+1);
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator