题目背景
这个暑假,小Z的空闲时间都在看2020东京奥运会。
看着看着,小Z想出了一个问题。
题目描述
小Z得到了一些国家的获奖信息,他想让你帮助他生成一下“奥运奖牌榜”。
获奖信息有很多行,每行包含两部分:第一部分是国家名,第二部分表示获奖是金牌、银牌还是铜牌。(国家名使用大写的三字母表示,金牌、银牌、铜牌分别使用Gold
, Silver
, Bronze
表示)
如CHN Gold
表示中国获得了一块金牌。
生成的奥运奖牌榜需要满足以下规则:
- 按照第一关键字为金牌数量、第二关键字为银牌数量、第三关键字为铜牌数量的顺序从大到小排序。
- 如果金银铜数量均相同,按照国家名英文字典序从小到大排序。
- 如果有超过10个国家,只需要输出奖牌榜的前10名。
- 奥运奖牌榜第输出格式为,每个国家一行,每行为国家名,金牌数量,银牌数量,铜牌数量,奖牌总计。如
CHN 34 24 16 74
。
输入格式
第一行一个整数n,表示获奖信息的行数。
接下来n行,每行两个空格隔开的字符串表示一条获奖信息,第一个字符串由三个大写字母组成表示国家名,第二个字符串为Gold
, Silver
, Bronze
之一,表示金、银、铜牌。
输出格式
输出包含最多10行,表示奥运奖牌榜。
每行为空格隔开的一个字符串与四个整数,表示国家名,金牌数量,银牌数量,铜牌数量,奖牌总计。
输入输出样例
输入 #1复制
5 CHN Gold CHN Silver USA Gold USA Bronze JPN Bronze
输出 #1复制
CHN 1 1 0 2 USA 1 0 1 2 JPN 0 0 1 1
输入 #2复制
5 CHN Gold CHN Silver CHN Bronze USA Silver JPN Silver
输出 #2复制
CHN 1 1 1 3 JPN 0 1 0 1 USA 0 1 0 1
说明/提示
数据范围与约束:
对于 30%的数据,满足n≤10n≤10;
对于 60%的数据,满足n≤1000n≤1000;
对于 90%的数据,满足n≤106n≤106;
对于 100%的数据,满足1≤n≤1071≤n≤107。
代码
#include <iostream>
#include <vector>
#include <unordered_set>using namespace std;
int main() {
int n, m;cin >> n >> m;vector<int>ribbon(n);for (int i = 0; i < n; i++) {cin >> ribbon[i];}for (int i =0; i <m; i++) {
int l, r;cin>>l>>r;unordered_set<int> colors;for (int j=l-1;j<r;j++){ colors.insert(ribbon[j]);}cout << colors.size()<< endl;
}return 0;
}