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