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 |
呜呜呜,为什么我总是超15ms,我觉得我的程序不能再减了,或者我的算法不妥??请教啊~~~!!!#include <stdio.h> #include <stdlib.h> const long maxn=100000; const double INFINIT=1000001; typedef struct { long x1,y1,x2,y2; double k; }point; point p[maxn]; long n; typedef struct { int c; double k; }aaa; aaa a[maxn*10]; __int64 count; int compare(const void *a,const void *b) { point *x=(point *)a; point *y=(point *)b; double k=x->k-y->k; if(k==0) { if(x->x1==y->x1) return x->x2-y->x2; else return x->x1-y->x1; } else if(k<0) return -1; return 1; } int main() { int N,m,i; scanf("%d",&N); for(m=0;m<N;m++) { scanf("%ld",&n); for(i=0;i<n;i++) { scanf("%ld%ld%ld%ld",&p[i].x1,&p[i].y1,&p[i].x2,&p[i].y2); if(p[i].x2==p[i].x1) p[i].k=INFINIT; else p[i].k=(p[i].y2-p[i].y1)/(p[i].x2-p[i].x1); } for(i=0;i<maxn*10;i++) { a[i].c=0; a[i].k=-INFINIT; } qsort(p,n,sizeof(point),compare); count=0; for(i=0;i<n;i++) { long j; if(a[p[i].x1].k==p[i].k) count+=a[p[i].x1].c; else a[p[i].x1].k=p[i].k; for(j=p[i].x1;j<p[i].x2;j++) if(a[j].k==p[i].k) a[j].c++; else { a[j].c=1; a[j].k=p[i].k; } } printf("Scenario #%d:\n",m+1); printf("%I64d\n\n",count); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator