HDU 2523 SORT AGAIN

http://acm.hdu.edu.cn/showproblem.php?pid=2523

求差的绝对值第k大的数,注意相同的差算一个。

分析出差的绝对值在[0,2000]这个范围内,由此可以搞出hash数组

View Code
#include <stdio.h>

#include <string.h>

#include <stdlib.h>

int abs(int a)

{

    return a>0?a:-a;

}



int a[3000],hash[5000];

int main()

{

    int t,n,k;

    int i,j; 

    scanf("%d",&t);

    while(t--)

    {

        memset(hash,0,sizeof(hash));

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

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

            scanf("%d",a+i);

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

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

                hash[abs(a[i]-a[j])]=1;

        int cnt=0;

        for(i=0;i<=2000;i++)

            if(hash[i]){

                cnt++;

                if(cnt==k)

                    break;

            }

        printf("%d\n",i);

    }

    return 0;

}

 

你可能感兴趣的:(sort)