331. 世界编程大赛
题目描述
世界编程大赛已经结束,所有选手的成绩已经测试出来。共n位选手,每个人的信息包括:姓名,国家/地区,得分。请为每个参赛国家/地区,评选出该地区的第一名,如果同分按照输入顺序排列。按照地区字典序输出结果。
输入输出格式
输入格式
输入第一行为正整数n,以下n行每行为选手的姓名,地区,整数得分,姓名是一个字符串其间没有空格,地区名也类似。n<=1000。
输出格式
输出第一行的整数代表共有几个地区参赛,之后若干行,每行为地区名,该地区第一名的选手姓名,按照地区名的字典序排列。
输入输出样例
输入样例1:
7 Mike China 999 Petr Russia 1000 Shawn China 1000 Aamir India 500 Tiancheng China 1000 Jose Mexico 250 Mark USA 888
输出样例1:
5 China Shawn India Aamir Mexico Jose Russia Petr USA Mark
该题主要使用两大知识点
1. struct 有关知识点见 C语言结构体(struct)常见使用方法_秦伟H的博客-CSDN博客_struct
2. map 有关知识点见C++ map用法总结(整理)_sevencheng798的博客-CSDN博客_c++ map
本代码采用的是结构体变量进行储存输入数据.整理输入数据的办法
这样能使时间复杂度(OS)变小
比暴力好得多
map也能很好地替代cnt数组
#include <bits/stdc++.h>
using namespace std;
struct people {
string name;
int score;
};
int main() {
map<string, people> m;
int n;
string cn;
people a;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a.name >> cn >> a.score;
if (a.score > m[cn].score) m[cn].score = a.score, m[cn].name = a.name;
}
cout << m.size() << endl;
map<string, people>::iterator mit;
for (mit = m.begin(); mit != m.end(); mit++)
cout << mit->first << " " << mit->second.name << endl;
return 0;
}
没有账号的小盆友看这里~
#include <bits/stdc++.h>
using namespace std;
struct people {
string name;
int score;
};
int main() {
map<string, people> m;
int n;
string cn;
people a;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a.name >> cn >> a.score;
if (a.score > m[cn].score) m[cn].score = a.score, m[cn].name = a.name;
}
cout << m.size() << endl;
map<string, people>::iterator mit;
for (mit = m.begin(); mit != m.end(); mit++)
cout << mit->first << " " << mit->second.name << endl;
return 0;
}
以上就是本期所有内容了 谢谢
希望各位大佬们点个赞👍吧!!!求求啦~~~
关注+点赞超过100个立马更新哦!
版权声明:本文为CSDN博主「ian20120124_」的原创文章,如需转载,请通知CSDN博主「ian20120124_」。
————————————————————————————————
————————————————
————————————————