您的位置:首页 > 编程语言 > C语言/C++

省赛题目:阵前第一功

2017-05-27 22:50 155 查看
从现在开始,闲暇之余有空就敲几道竞赛题目,我都会放上来与大家分享交流;数据结构那块还会继续写下去,毕竟那才是饭碗。


阵前第一功

Time Limit: 1000 MS Memory Limit: 65536 KB

题目描述:
A国每个国民都有一定战斗力,每年国家都要对人民的战斗力进行一次排序统计,他们的排序规矩是相同战斗力的排名一样,而且只占一个排序名额。比如,
有5个人:100,100,90,90,70. 两个100的并列第一,称为第一战斗力,两个90的并列第二,称为第二战斗力,依次类推……现在你想查询第K战斗力是多少?

输入描述:
先输入一个整数T,表示T(T<50)组数据。
每组第一行一个正整数N(1000>N>0),表示表示有N个人。接下里一行N个正整数ai(2^30>=ai>=0),表示每个人的战斗力。
接下输入一个正整数K(N>=K>0)。(保证输入都合法)

输出描述:
输出第K战斗力,输出占一行

输入样例:
2
5
100 90 90 100 70
2
10
1 2 3 3 3 400 3 4 3 1
4

输出样例:
90
2

分析:题目难度不大,我们利用sort()函数快排一次续,但注意是降序,因此我们要添个compare()函数,还有一部操作就是排序完后我们进行去重操作就OK了。
还是直接甩代码。


#include <iostream>
#include <malloc.h>
#include <algorithm>
using namespace std;

bool compare(int a, int b)
{
return a > b;
}

int main()
{
int T, n, k, temp, a[1000];
cin >> T;
while(T--){
cin >> n;
for(int i = 0; i < n; i++)
cin >> a[i];
sort(a, a + n, compare);
cin >> k;
temp = a[0];
for(i = 1, --k; i < n && k; i++)
if(a[i] != temp){
--k;
temp = a[i];
}
cout << temp << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  竞赛算法 省赛 c++
相关文章推荐