Codeforces Round #346 (Div. 2) B (pair+vector的应用)

本文详细解析了Codeforces竞赛中关于区域得分前两名输出的题目,通过使用C++编程实现解决方案,并对代码进行注释解释。重点介绍了如何使用vector容器、pair结构以及sort函数来解决此类问题。

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


http://codeforces.com/contest/659/problem/B


题意:每个区域中有一些人,这些人有人名和对应的分数,如果能够确定每个区域中分数前两名,就把这两个人的名字输出,如果不能确定,就输出问号。


vector相当于一个不知道下标要开多少大的数组,而且数组中可以存放更多类型的东西。


#include<bits/stdc++.h> //包含了所有的头文件
#define MAXN 100005
using namespace std; //不包括在头文件中
int n, m, region, score;
string name;
vector<pair<int, string> >s[MAXN];
bool cmp(pair<int,string> A,pair<int,string> B)
{
    return A.first>B.first;
}
int main()
{
    scanf("%d%d", &n, &m);
    for (int i = 0; i < n; i++)
    {
        cin >> name >> region >> score;
        s[region].push_back(make_pair(score, name));
    }
    for (int i = 1; i <= m; i++)
    {
        sort(s[i].begin(), s[i].end(), cmp);
    }
    for (int i = 1; i <= m; i++)
    {
        if (s[i].size() == 2)
            cout << s[i][0].second << ' ' << s[i][1].second << endl;
        else
        {
            if (s[i][1].first == s[i][2].first) cout << '?' << endl;
            else
                cout << s[i][0].second << ' ' << s[i][1].second << endl;
        }
    }
    return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值