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 <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int main() { int data[2005],hash[2005]; int c,n,t; cin>>c; while(c--) { memset(data,0,sizeof(data)); memset(hash,0,sizeof(hash)); cin>>n>>t; for(int i=1;i<=n;i++) cin>>data[i]; sort(data+1,data+n+1); for(int i=1;i<n;i++) { for(int j=i+1;j<=n;j++) { hash[data[j]-data[i]]++; } } int z=0; for(int i=0;i<=2000;i++) { if(hash[i]) { z++; if(z==t) { cout<<i<<endl; break; } } } } return 0; }