“卓见杯”2020年河南省第二届CCPC大学生程序设计竞赛 A.班委竞选

本文介绍了一种通过排序解决班干部选举问题的简单算法。在该问题中,多名学生竞选不同职位,根据获得的票数选出获胜者。文章提供了一个C++实现示例,使用了map和set数据结构来跟踪每个职位的候选人及其得票数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

某班级中有 n 位学生,学号为 1,2,…,n。现在班级中正在举行 m 个班干部职位的竞选,职位用 1,2,…,m 编号。学号为 i 的同学竞选的职位为 ci,获得 ti 票。最终每个职位选择票数最高的同学上任,若存在多个同学票数一致,则选择学号最小的同学上任。
现在给你唱票结果,请你告诉班主任最终的班干部名单。

输入

第一行包含两个整数 n, m (1≤n≤51, 1≤m≤12, m≤n),含义见题目描述。
接下来 n 行,第 i 行包含两个整数 ci, ti (1≤ci≤m, 1≤ti≤n),含义见题目描述。
数据保证每个职位至少有一位同学参与竞选。

输出

输出一行,包含 m 个整数。第 i 个整数表示担任第 i 个班干部职位的同学学号。

样例输入 Copy

5 2
1 2
2 1
2 1
1 1
2 2

样例输出 Copy

1 5

提示

样例输入二
12 8
8 12
6 8
2 6
1 8
1 7
2 9
3 12
4 9
5 1
6 12
7 6
8 8
样例输出二
4 6 7 8 9 10 11 1
第一个样例中,第 1 个岗位有学号 1 和学号 4 两个同学竞选,获得的票数分别为 2 和 1,第 1 个岗位由获得票数最多的学号 1 同学来担任;第 2 个岗位有学号 2, 3 和 5 三个同学竞选,获得的票数分别为 1, 1 和 2,第 2 个岗位由获得票数最多的学号 5 同学来担任。

思路:

直接排序就可以了,签到题。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
 
const int mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;
const int N = 5e5 + 10;
 
struct node
{
    int p, id;
    bool operator < (const node &oth)const
    {
        if (p != oth.p)
            return p > oth.p;
        return id < oth.id;
    }
};
int main()
{
#ifdef LOCAL
    freopen("E:/input.txt", "r", stdin);
#endif
    map<int, set<node>>mp;
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i++)
    {
        int c, t;
        cin >> c >> t;
        mp[c].insert({ t, i });
    }
    for (int i = 1; i <= m; i++)
        cout << mp[i].begin()->id << (i == m ? '\n' : ' ');
    return 0;
}

 

### CCPC省赛历题目及解析 CCPC(中国大学生程序设计竞赛)作为国内重要的编程赛事之一,吸引了大量高校学生参与。以下是关于CCPC省赛历题目及相关解析的内容概述。 #### 资源汇总 ACM/CCPC历届真题题解资源库提供了一个全面的平台,用于获取从早期到近的各种比赛题目以及详细的解题思路[^1]。这些资料不仅涵盖了基础算法和数据结构的应用,还包括了一些高级技巧和优化方法,非常适合参赛者和算法爱好者学习与练习。 #### 特定省份的真题分析 以2021卓见第三届CCPC河南省省赛为例,该次比赛提供了完整的题目解析,包括但不限于动态规划、贪心算法等多种经典算法的实际运用案例[^3]。对于初学者而言,这类详尽的解析能够有效降低理解门槛,并通过实例加深对理论知识的理解。 另外,在准备过程中也可以参考其他类似水平的比赛经验分享,比如蓝桥的相关讨论。尽管蓝桥的整体难度低于ICPC或CCPC,但它同样考验选手的基础功底和技术广度[^2]。因此,适当借鉴其训练模式有助于提高综合争力。 #### 学习建议 为了更好地利用上述资源进行针对性复习,请注意以下几点: - **分类整理**:按照不同类型的算法将遇到的问题归纳总结; - **实践操作**:除了阅读官方解答外,更重要的是亲自编写代码实现解决方案; - **交流互动**:加入相关社区或者小组,与其他成员共同探讨难题突破方向; 最后提醒大家保持耐心持续努力,只有不断积累才能在正式比赛中发挥出色表现! ```python # 示例代码片段展示如何解决某一类常见问题——斐波那契数列计算 def fibonacci(n): if n <= 0: return [] elif n == 1: return [0] fib_sequence = [0, 1] while len(fib_sequence) < n: next_value = fib_sequence[-1] + fib_sequence[-2] fib_sequence.append(next_value) return fib_sequence[:n] print(fibonacci(10)) # 输出前十个斐波那契数值 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值