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