HFUT 1355.阵前第一功(安徽省2016“京胜杯”程序设计大赛 B)

285


题目



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


题解



数据输入后,排序

从大到小找即可

不知道为什么当时比赛的时候死都AC不了

代码



/*
By:OhYee
Github:OhYee
HomePage:http://www.oyohyee.com
Email:oyohyee@oyohyee.com
Blog:http://www.cnblogs.com/ohyee/

かしこいかわいい?
エリーチカ!
要写出来Хорошо的代码哦~
*/

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <string>
#include <iostream>
#include <vector>
#include <list>
#include <queue>
#include <stack>
#include <map>
#include <set>
using namespace std;

//DEBUG MODE
#define debug 0

//循环
#define REP(n) for(int o=0;o<n;o++)

const int maxn = 1005;
int p[maxn];

void Do() {
    int n;
    scanf("%d",&n);
    REP(n)
        scanf("%d",&p[o]);
    int q;
    scanf("%d",&q);

    sort(p,p + n);
    int k = 1;
    int ans = p[n - 1];
    for(int i = n - 1;i >= 0;i--) {
        if(ans != p[i]) {
            ans = p[i];
            k++;
        }
        if(q == k)
            break;
    }
    printf("%d\n",ans);
}

int main() {
    int T;
    scanf("%d",&T);
    while(T--) 
        Do();
    return 0;
}
发布评论
  • 点击查看/关闭被识别为广告的评论