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 |
弱问各位……sort()这儿我是不是又错了?今天重写了一下~ 当年是自己写的qsort() 结果……2.5s ac 然后改成stl sort() 结果巨慢无比…… 4.6s才a掉…… 各位大牛~告诉我为什么 //1971.cpp //Parallelogram Counting //By phoenixinter //On 8/14/2005 #include<stdio.h> #include<algorithm> using namespace std; struct Point { int x,y; } p[1001]; struct segment { double s,l; } seg[500001]; int partition(int p,int r) { int i=p,j=r+1; segment x=seg[p]; while(true) { while(seg[++i].s<x.s||(seg[i].s==x.s&&seg[i].l<x.l)); while(seg[--j].s>x.s||(seg[j].s==x.s&&seg[j].l>x.l)); if(i>=j) break; segment temp=seg[i]; seg[i]=seg[j]; seg[j]=temp; } seg[p]=seg[j]; seg[j]=x; return j; } void qsort(int p,int r) { if(p<r) { int q=partition(p,r); qsort(p,q-1); qsort(q+1,r); } } bool operator < (segment a,segment b) { return a.s<b.s||(a.s==b.s&&a.l<b.l); } int main() { int t,i,j,no,n=0,count,sum; scanf("%d",&t); while(t--) { scanf("%d",&no); for(i=1;i<=no;i++) scanf("%d %d",&p[i].x,&p[i].y); n=0; for(i=1;i<=no-1;i++) for(j=i+1;j<=no;j++) { seg[++n].s=(double)(p[i].x+p[j].x)/2; seg[n].l=(double)(p[i].y+p[j].y)/2; } //printf("n:%d\n",n); sort(seg+1,seg+n+1); //qsort(1,n); /* for(i=1;i<=n;i++) printf("%lf %lf\n",seg[i].s,seg[i].l); */ count=0,sum=0; for(i=2;i<=n;i++) { if(seg[i].s==seg[i-1].s&&seg[i].l==seg[i-1].l) count++; else { sum+=count*(count+1)/2; count=0; } } printf("%d\n",sum); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator