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
#include <cstdio>
#include <set>
#include <cmath>
int main(int argc, const char *argv[])
{
int nTest = 0;
scanf("%d", &nTest);
while(nTest --)
{
int hsh[2005] = {0};
int n = 0, k = 0;
scanf("%d%d", &n, &k);
int *p = new int[n];
for(int i = 0;i < n;++ i)
{
scanf("%d", p + i);
}
for(int i = 0;i < n - 1;++ i)
{
for(int j = i + 1;j < n;++ j)
{
hsh[abs(p[i] - p[j])] = 1;
}
}
int cnt = 0;
for(int i = 0;i <= 20000;++ i)
{
if(hsh[i])
{
++ cnt;
if(cnt == k)
{
printf("%d\n", i);
break;
}
}
}
delete []p;
}
return 0;
}