SORT AGAIN
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1395 Accepted Submission(s): 448
Problem Description
给你N个整数,x1,x2...xn,任取两个整数组合得到|xi-xj|,(0<i,j<=N,i!=j)。
现在请你计算第K大的组合数是哪个(一个组合数为第K大是指有K-1个不同的组合数小于它)。
现在请你计算第K大的组合数是哪个(一个组合数为第K大是指有K-1个不同的组合数小于它)。
Input
输入数据首先包含一个正整数C,表示包含C组测试用例.
每组测试数据的第一行包含两个整数N,K。(1<N<=1000,0<K<=2000)
接下去一行包含N个整数,代表x1,x2..xn。(0<=xi<=2000)
每组测试数据的第一行包含两个整数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
3 2
4 0 7
4 2
1 2 3 4
2 1
2 9
Sample Output
4
2
7
2
7
小白叫咱们学STL,没想到这题竟然写成了这个样子,无语啊!!!
#include <iostream>
#include <vector>
#include <cstdlib>
#include <algorithm>
#include <cstring>
using namespace std;
vector< int > s, r;
int hash[2005];
int main( )
{
int T;
cin>> T;
while( T-- )
{
int N, K;
cin>> N>> K;
for( int h= 1; h<= N; ++h )
{
int c;
cin>> c;
s. push_back( c );
}
for( vector< int >:: iterator i= s. begin( ); i!= s. end( ); ++i )
{
vector< int >:: iterator t= ++i;
--i;
for( vector< int >:: iterator j= t; j!= s. end( ); ++j )
{
// cout<< abs( *i- *j )<< endl;
// r. push_back( abs( *i- *j ) )
// cout<< *i<< *j<< endl;
hash[ abs( *i- *j ) ]= 1;
}
}
// sort( r. begin( ), r. end( ) );
// cout<< r. size( )<< endl;
// for( vector< int >:: iterator i= r. begin( ); i!= r. end( ); ++i )
// {
// cout<< *i<< " ";
// }
// cout<< "\n";
// unique( r. begin( ), r. end( ) );
// cout<< r[K- 1]<< endl;
// s. clear( ), r. clear( );
int cnt= 0;
for( int i= 0; i<= 20000; ++i )
{
if( hash[i] )
{
++cnt;
if( cnt== K )
{
cout<< i<< endl;
break;
}
}
}
s. clear( );
memset( hash, 0, sizeof( hash ) );
}
return 0;
}
各位知道我在干什么吗?