讨论 / 超时??
Happiness 2013-10-17 20:52:00
点我顶贴 收藏 删除
竟然有两个点超时!!什么情况??

#include <stdio.h>

int a[5001]={0},h[5001]={0};

int n;

void swap(int *x,int *y)

{

int t;

t=*x;

*x=*y;

*y=t;

}

void Q_sort(int l,int r)

{

int tl,tr,i;

int mida,midh;

tl=l,tr=r;

mida=a[(tl+tr)/2]; //以 a[i]为关键字

midh=h[(tl+tr)/2];

while(tl<=tr)

{

while(a[tl]>mida || (a[tl]==mida && h[tl]<midh))

tl++;

while(a[tr]<mida || (a[tr]==mida && h[tr]>midh))

tr--;

if(tl<=tr)

{

swap(&a[tl],&a[tr]);

swap(&h[tl],&h[tr]);

tl++;

tr--;

}

if(tl<r)

Q_sort(tl,r);

if(tr>l)

Q_sort(l,tr);

}

}

int main()

{

int m,i,x,y,M,tot=0;

scanf("%d%d",&n,&m);

M=m*1.5;

for(i=1;i<=n;i++)

{

scanf("%d%d",&x,&y);

a[i]=y;

h[i]=x;

}

Q_sort(1,n);

for(i=M+1;i<=n;i++)

if(a[i]==a[M])

tot++;

printf("%d %d\n",a[M],tot+M);

for(i=1;i<=M;i++)

printf("%d %d\n",h[i],a[i]);

for(i=M+1;i<=n;i++)

if(a[i]==a[M])

printf("%d %d\n",h[i],a[i]);

return 0;

}

查看更多回复
提交回复