题目 C : 花园小学运动会

题目描述 

花园小学正在进行紧张刺激的运动会!每个班级都有一个独一无二的数字。现在正是 10000 米短跑比赛的现场。许多班级的运动员们已经纷纷准备就绪。正等一声令下,开始比赛。10000 米短跑比赛有一个传统,就是每当一个运动员跑到终点时,都会大声喊出他的班级号,来显示一种荣耀。现在,给出 n 个数,代表通过终点的 n 个人所喊出的班级号,你需要统计有多少班级在这场比赛中参赛了正好 k 个人,计算出在这些班级中,获得第一名的选手是哪个班级的。输出他所在的班级号。

假设每一个参加比赛的人都通过了终点。

输入 

每组数据第一行,n,k。代表有 n 个人,要求保留 k 个人的班。(n,k<=1000000)

接下来一行 n 个数,依次代表选手通过终点所喊出的班级号(a[1]代表第一个通过终点的选手喊出的班级号,依次类推)。 (a[i]<=1000000)

处理到文件结束。

输出 

每行一个数。

若没有班级通过 k 人,输出-1。

样例输入

5 2
4 2 3 2 3


样例输出

2

解题思路

这个题就是在题目上比较绕,仔细阅读题意就好,需要注意的是数据大小,容易超时。

参考代码

#include 
#include 
#include 
#include 
#define MAX_LEN 1000005
using namespace std;int className[MAX_LEN];
int classRank[MAX_LEN];int main()
{int n,k;while (cin>>n>>k){memset(className, 0, sizeof(className) );memset(classRank, 0, sizeof(classRank) );for(int i=1; i<=n; i++){int temp;scanf("%d",&temp);classRank[i] = temp;//按记录排名的班级名className[temp]++;//记录班级对应的人数}bool flag = true;for(int i=1; i<=n; i++)//按名次遍历班级{if(className[classRank[i]] == k)//找出班级人数正好为K且排名{cout<

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部