Bailian3260 赛手查询排序

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bailian3260 赛手查询排序相关的知识,希望对你有一定的参考价值。

3260:赛手查询

总时间限制: 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 赛手查询排序的主要内容,如果未能解决你的问题,请参考以下文章

猜比赛名次

跳水猜名次(说对一半)

UVA - 1612 Guess (猜名次)(贪心)

dtoj#4179. 排行(rank)

Python题,这个题用字典统计排序怎么写?

Bailian2998 日志排序排序