HFUT 1355.阵前第一功(安徽省2016“京胜杯”程序设计大赛 B)
阵前第一功
Time Limit: 1000 MS Memory Limit: 65536 KB Total Submissions: 15 Accepted: 8
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不了
AC代码:GitHub
1 /* 2 By:OhYee 3 Github:OhYee 4 HomePage:http://www.oyohyee.com 5 Email:oyohyee@oyohyee.com 6 Blog:http://www.cnblogs.com/ohyee/ 7 8 かしこいかわいい? 9 エリーチカ! 10 要写出来Хорошо的代码哦~ 11 */ 12 13 #include <cstdio> 14 #include <algorithm> 15 #include <cstring> 16 #include <cmath> 17 #include <string> 18 #include <iostream> 19 #include <vector> 20 #include <list> 21 #include <queue> 22 #include <stack> 23 #include <map> 24 #include <set> 25 using namespace std; 26 27 //DEBUG MODE 28 #define debug 0 29 30 //循环 31 #define REP(n) for(int o=0;o<n;o++) 32 33 const int maxn = 1005; 34 int p[maxn]; 35 36 void Do() { 37 int n; 38 scanf("%d",&n); 39 REP(n) 40 scanf("%d",&p[o]); 41 int q; 42 scanf("%d",&q); 43 44 sort(p,p + n); 45 int k = 1; 46 int ans = p[n - 1]; 47 for(int i = n - 1;i >= 0;i--) { 48 if(ans != p[i]) { 49 ans = p[i]; 50 k++; 51 } 52 if(q == k) 53 break; 54 } 55 printf("%d\n",ans); 56 } 57 58 int main() { 59 int T; 60 scanf("%d",&T); 61 while(T--) 62 Do(); 63 return 0; 64 }
然而,我并不能保证我说的是对的。请自行验证,如有错误,请指正
新博客地址
https://www.oyohyee.com
https://www.oyohyee.com