HDU-2523 SORT AGAIN

http://acm.hdu.edu.cn/showproblem.php?pid=2523

学习哈希和注意i++,后要--i;

                   SORT AGAIN

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3479    Accepted Submission(s): 1107

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<algorithm>
#include<cstring>
using namespace std;
int main()
{
	int t,n,k,i,a[2000],j,b[2000];
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d",&n,&k);
		for(i=0;i<n;i++)
		   scanf("%d",&a[i]);
		memset(b,0,sizeof(b));
		  sort(a,a+n);
		for(i=0;i<n;i++)
			for(j=i+1;j<n;j++)
				b[a[j]-a[i]]=1;
		   i=0;
		   while(k!=0)
		       k-=b[i++];
		printf("%d\n",--i);//注意i++,后要--i;
	}
	return 0;
}
                

 

你可能感兴趣的:(sort)