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 |
这个题目怎么省时间啊!!我用快速排序通不过!!(附有程序) 大牛们帮忙优化一下或几下!(-_-)!#include "stdio.h" #include "memory.h" long n,c; long a[100001]; long partition(long low,long high) { long temp; temp=a[low]; while(low<high){ while(low<high&&a[high]>=temp) --high; a[low]=a[high]; while(low<high&&a[low]<=temp) ++low; a[high]=a[low]; } a[low]=temp; return low; } long quick(long low,long high) { long pivotloc; if(low<high) { pivotloc=partition(low,high); quick(low,pivotloc-1); quick(pivotloc+1,high); } return 1; } void bisection(long min,long max) { long medi,i,num,temp1,flag; long high,low; low=1; high=max-min+1; while(high-low>1) { num=c; medi=(low+high)/2; temp1=a[1]; flag=0; num--; for(i=2;i<=n;i++) { if(a[i]-temp1>=medi) { num--; temp1=a[i]; if(num==0) { flag=1; break; } } } if(flag==1) low=medi; else high=medi; } printf("%ld\n",low); } long main() { long i,max=0,min=1000000001; scanf("%ld%ld",&n,&c); memset(a,0,sizeof(a)); for(i=1;i<=n;i++) { scanf("%ld",&a[i]); if(a[i]<min) min=a[i]; if(a[i]>max) max=a[i]; } quick(1,n); bisection(min,max); return 1; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator