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;
}