AcWing 5851. 亚运奖牌榜【模拟】

好久没更新了

去武汉玩了几天

一回来就发博客,还不先点赞

原题链接

5851. 亚运奖牌榜 - AcWing题库

题目

2023 年第 19届亚运会即将在杭州召开,杭州已经做好准备欢迎全亚洲的观众一同参与亚运盛会了!

你正在开发一款跟亚运奖牌计算相关的 App。

给定两个国家的获奖情况,你的任务是计算这两个国家/地区的奖牌情况,并确定哪个国家/地区要排在奖牌榜的前面。

输入格式

输入第一行是一个正整数 N,表示总共有 N 条获奖记录。

接下来 N 行,每行描述一条记录,包含两个整数 Ci,Pi,其中 Ci=0,1;0 表示是第一个国家/地区,1 表示是第二个国家/地区;Pi=1,2,3,1 表示金牌,2 表示银牌,3 表示铜牌。

输出格式

首先输出两行,第一行是第一个国家/地区的金牌、银牌、铜牌获得数,用空格隔开;第二行是第二个国家/地区的奖牌获奖情况,要求与格式同第一个国家/地区。

最后一行,如果是第一个国家/地区排在前面,输出 The first win!,否则输出 The second win!

排在前面的定义是:先比较金牌数,金牌数较大的排在前面;如金牌数相等,比较银牌数,银牌数较大的在前面;如金牌银牌数都相等,则比较铜牌数,铜牌数较大的在前面。

保证数据不存在奖牌数完全相同的情况。

数据范围

1≤N≤1000

输入样例:
15
0 1
0 2
0 3
0 1
0 1
0 2
0 3
1 3
1 3
1 3
1 3
1 2
1 1
1 1
1 1
输出样例:
3 2 2
3 1 4
The first win!

题目来源

难度:简单
时/空限制:0.4s / 64MB
总通过数:803
总尝试数:1287
来源:

2023 睿抗机器人开发者大赛CAIP-编程技能赛-本科组(省赛)

这道题的核心是处理亚运会两个国家 / 地区的奖牌数据,并确定它们在奖牌榜上的排名,具体题目大意如下

核心任务
1.统计奖牌数量:根据输入的获奖记录,分别计算两个国家 / 地区的金牌、银牌、铜牌数量。
2.确定排名顺序:按照 “金牌数→银牌数→铜牌数” 的优先级比较两个国家 / 地区的奖牌情况,排出先后顺序。
输入说明
第一行是一个正整数 N,表示总共有 N 条获奖记录。
接下来 N 行,每行包含两个整数 Ci 和 Pi:
Ci 表示国家 / 地区(0 为第一个国家 / 地区,1 为第二个国家 / 地区)。
Pi 表示奖牌类型(1 为金牌,2 为银牌,3 为铜牌)。
输出要求
1.先输出两行数据,分别为第一个国家 / 地区和第二个国家 / 地区的 “金牌数 银牌数 铜牌数”(用空格分隔)。
2.最后一行根据排名规则输出结果:
  若第一个国家 / 地区排在前面,输出 The first win!。
  否则输出 The second win!。
排名规则
 优先级从高到低为:金牌数 → 银牌数 → 铜牌数。
 即先比较金牌数,金牌多的排前面;若金牌数相同,比较银牌数;若银牌数也相同,比较铜牌数。
 题目保证两个国家 / 地区的奖牌数不会完全相同,因此一定有明确排名。
示例说明
以输入样例为例,15 条记录中:
第一个国家获得 3 金、2 银、2 铜。
第二个国家获得 3 金、1 银、4 铜。
由于金牌数相同,比较银牌数(2 > 1),因此第一个国家排在前面,输出 The first win!。

在本题中,在 C++ 中,vector是一个动态数组容器,能够灵活地存储和管理元素。

在题目中,使用vector<vector<int>> q(2, vector<int>(3))创建了一个结构清晰的二维容器,非常适合存储两个国家的三种奖牌数量,方便后续统计和比较操作。

代码如下

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);//这两行是为了提高输入输出效率,关闭了 C++ 标准流与 C 标准流的同步。
    
    int n;
    cin >> n;
    
    vector<vector<int>> q(2,vector<int>(3));
    
    while (n -- ){
        int c,p;
        cin >> c >> p;
        q[c][p-1]++;
    }
    
    for (size_t i = 0; i < q.size(); ++i) {
        for (size_t j = 0; j < q[i].size(); ++j) {
            cout << q[i][j] << ' ';
    }
    cout << '\n';
}
    if(q[0]>q[1]) cout << "The first win!"<<endl;
    else cout << "The second win!"<<endl;
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值