【PAT B1047】编程团体赛 (20 分)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【PAT B1047】编程团体赛 (20 分),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2043字,纯文字阅读大概需要3分钟。
内容图文
1047 编程团体赛 (20 分)
编程团体赛的规则为:每个参赛队由若干队员组成;所有队员独立比赛;参赛队的成绩为所有队员的成绩和;成绩最高的队获胜。
现给定所有队员的比赛成绩,请你编写程序找出冠军队。
输入格式:
输入第一行给出一个正整数 N(≤10?4??),即所有参赛队员总数。随后 N 行,每行给出一位队员的成绩,格式为:
队伍编号-队员编号 成绩
,其中队伍编号
为 1 到 1000 的正整数,队员编号
为 1 到 10 的正整数,成绩
为 0 到 100 的整数。输出格式:
在一行中输出冠军队的编号和总成绩,其间以一个空格分隔。注意:题目保证冠军队是唯一的。
输入样例:
6 3-10 99 11-5 87 102-1 0 102-3 100 11-9 89 3-2 61
输出样例:
11 176
=================================================================
思路是:用map把同一队的成绩累加起来,然后输出最高分。
以下碎碎念可以跳过直接看代码。
=================================================================
我踩的坑:
我想map不是自动从小到大排序嘛,那我直接累加完,把map的最后一个输出不就完事 ?(这步就已经想错了)
可是怎么输出map的最后一个呢?它又不支持m.end()-1(只有vector和string支持迭代器+数字),后来发现搞一个迭代器出来,
map<int, int>::iterator it = m.end();
--it; //让迭代器自减就是最后一个元素,因为m.end()是最后一个元素的下一个位置,美国人喜欢左闭右开。
printf("%d %d\n", it->first, it->second);
这样不就行了?我真的naive,因为我忘了最重要的一点,map自动排序时对 key 排序,而不是对 value 排序。
所以还是乖乖遍历m,找出最大值吧~
=================================================================
顺便打一个小广告:
以往的刷题过程中,经常摸鱼结果一个月下来A不了多少题,效率很低。为了提高积极性,搞了一个打卡群,在群友监督下,每天都能刷几题,让你不在摸鱼!
童鞋,你想变秃(变强)吗?你想疯狂水群(A题)吗?欢迎加入不是养老群的PAT打卡监督群:Q群号:937300205
#include <iostream>
#include <map>
using namespace std;
int main(){
int n, id, t, sco, max = -1, index = -1;
cin >> n;
getchar();
map<int, int> m;
for(int i = 0; i < n; i++){
scanf("%d-%d %d", &id, &t, &sco);
m[id] += sco;
}
for(auto it = m.begin(); it != m.end(); ++it){
if(it->second > max){
max = it->second;
index = it->first;
}
}
printf("%d %d\n", index, max);
return 0;
}
内容总结
以上是互联网集市为您收集整理的【PAT B1047】编程团体赛 (20 分)全部内容,希望文章能够帮你解决【PAT B1047】编程团体赛 (20 分)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。