2016京胜_B

Description A国每个国民都有一定战斗力,每年国家都要对人民的战斗力进行一次排序统计,他们的排序规矩是相同战斗力的排名一样,而且只占一个排序名额。比如,有5个人:100,100,90,90,70. 两个100的并列第一,称为第一战斗力,两个90的并列第二,称为第二战斗力,依次类推。。。现在你想查询第K战斗力是多少 Input 先输入一个整数T,表示T(T<50)组数据。 每组第一行一个正整数N(1000>N>0),表示表示有N个人。接下里一行N个正整数ai(2^30>=ai>=0),表示每个人的战斗力。 接下输入一个正整数K(N>=K>0)。(保证输入都合法) Output 输出第K战斗力,输出占一行 Sample Input 2 5 100 90 90 100 70 2 10 1 2 3 3 3 400 3 4 3 1 4 Sample Output 90 2 我的解题方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/*************************************************************************
> File Name: b.cpp
> Author:
> Mail:
> Created Time: 2016年06月05日 星期日 00时09分26秒
************************************************************************/
#include<iostream>
#include<algorithm>
#include<fstream>
#define DEBUG
using namespace std;
#define T 50
#define N 1000
struct Test_data
{
int find ;//需要寻找的序列
int test_size;
int arry[N];//每一组的测试数据
};
bool cmp ( int a, int b)
{
if ( a>b) return true;
else
return false;
}
void sort ( int *A, int size)
{
std::sort ( &A[0], &A[size], cmp);
}
int search( int *A ,int size,int find )
{
sort(A, size);
return A[find-1];//
}
int main()
{
int t;
Test_data test[T];
#ifdef DEBUG
//cin 重定向
std::ifstream cin("./b.txt");
#endif
cin>>t;
for ( int i =0 ; i<t;i++ )
{
int data_size;
cin>>data_size;
test[i].test_size=data_size;
for ( int n=0, k=0;k<data_size;k++,n++ )
{
cin>>test[i].arry[n];
bool same=false;
for ( int k=0; k<n;k++ )
{
if ( test[i].arry[k]==test[i].arry[n] )
{
same=true;
break;
}
}
if ( same )
n--;
}

cin>>test[i].find;

}



for ( int i=0;i<t;i++)
{
cout<<search( &test[i].arry[0],test[i].test_size,test[i].find)<<endl;
}
}