天天看点

hdu 2523SORT AGAIN

SORT AGAIN

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 2873    Accepted Submission(s): 903

Problem Description 给你N个整数,x1,x2...xn,任取两个整数组合得到|xi-xj|,(0<i,j<=N,i!=j)。

现在请你计算第K大的组合数是哪个(一个组合数为第K大是指有K-1个不同的组合数小于它)。  

Input 输入数据首先包含一个正整数C,表示包含C组测试用例.

每组测试数据的第一行包含两个整数N,K。(1<N<=1000,0<K<=2000)

接下去一行包含N个整数,代表x1,x2..xn。(0<=xi<=2000)  

Output 对于每组测试数据,请输出第K大的组合数,每个输出实例占一行。  

Sample Input

3
3 2
4 0 7
4 2
1 2 3 4
2 1
2 9
        

Sample Output

4
2
7
        

Source HDU 2008-10 Programming Contest  

Recommend gaojie

//由于数据在0-2000之间,所以先用数组记录组合数,然后再查找第k大的数。
#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
    int c, n, k, i, j, r, a[1001], b[2001];
    scanf("%d", &c);
    while(c--)
    {
		scanf("%d%d", &n, &k);
        memset(b, 0, sizeof(b));
        for(i = 0; i < n; i++)
        {
            scanf("%d", a+i);
            for(j = 0; j < i; j++)
                b[(int)fabs(a[i]-a[j])] = 1;
        }
        for(i = 0, r = 0; r != k; i++)
            if(b[i])
				r++;
        printf("%d\n", i-1);
    }
    return 0;
}