Bailian3260 赛手查询排序
Posted 海岛Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bailian3260 赛手查询排序相关的知识,希望对你有一定的参考价值。
总时间限制: 1000ms 内存限制: 65536kB
描述
给定一场比赛N个选手的得分,可得到一场比赛的排名,此时常常遇到积分相同而并列名次的现象。以N = 6为例,6个选手的得分假设为:
1号选手:100 ;2号选手:100;3号选手: 300
4号选手:200 ;5号选手:300;6号选手:150;
则有:3号,5号并列第1名;
4号第3名;
6号第4名;
1号,2号并列第5名;
已知N个选手的得分以及需要查询的名次,输出对应名次下选手的序号。
输入
测试文件包含多组测试样例;
每组测试样例中:
第一行为一个整数N,表明有N名选手;
(0 <= N <= 255; 当输入N为0时,表示测试结束,你不需要处理该组数据)
第二行为N个整数组成的序列,表明N个选手依次的得分,分数范围0~65535;
第三行为待查询的名次P ( 1<= P <= N);
输出
每个测试用例对应输出一行:查询名次的对应选手序号;如果待查询名次有多人并列,依序号大小,升序输出,序号之间以一个空格隔开;如果待查询名次空缺,输出0;
样例输入
6
100 100 300 200 300 150
5
6
100 100 300 200 300 150
3
6
100 100 300 200 300 150
2
0
样例输出
1 2
4
0
来源
CDragon
问题链接:Bailian4118 开餐馆
问题简述:(略)
问题分析:简单题,不解释。
程序说明:(略)
参考链接:(略)
题记:(略)
AC的C++语言程序如下:
/* Bailian3260 赛手查询 */
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
const int N = 255 + 1;
pair<int, int> a[N];
bool cmp(const pair<int, int> a, pair<int, int> b)
return a.first == b.first ? a.second <b.second : a.first > b.first;
int main()
int n, s, p;
while (~scanf("%d", &n) && n)
for (int i = 0; i < n; i++)
scanf("%d", &s);
a[i] = make_pair(s, i + 1);
sort(a, a + n, cmp);
scanf("%d", &p);
p--;
if (p && a[p].first == a[p - 1].first)
printf("0\\n");
else
printf("%d", a[p].second);
while (++p < n && a[p].first == a[p - 1].first)
printf(" %d", a[p].second);
printf("\\n");
return 0;
以上是关于Bailian3260 赛手查询排序的主要内容,如果未能解决你的问题,请参考以下文章