一开始我是以学号为key,自己还想分数和名字可能测试点里会有重复的。但是!居然测试点里学号有重复的,导致我一直过不去测试点3。本来十分钟搞定的题目,改了40多分钟。在我快放弃的时候,把key换成分数就过了。。。真的无语😓
#include<bits/stdc++.h>
using namespace std;
struct stu {
string name, id;
int g;
};
unordered_map<int, stu> mp;
vector<stu> ans;
bool cmp (stu a, stu b) {
return a.g > b.g;
}
int main() {
int n, g, g1, g2, flag = 0;
string name, id;
scanf ("%d", &n);
for (int i = 0; i < n; i++) {
stu temp;
cin >> temp.name >> temp.id >> temp.g;
mp[temp.g] = temp;
}
scanf ("%d %d", &g1, &g2);
for (auto it : mp) {
ans.push_back(it.second);
}
sort (ans.begin(), ans.end(), cmp);
for (int i = 0; i < ans.size(); i++)
if (ans[i].g <= g2 && ans[i].g >= g1) {
printf ("%s %s\n", ans[i].name.c_str(), ans[i].id.c_str());
flag = 1;
}
if (flag == 0) printf ("NONE\n");
}
博主在编程竞赛中遇到一个题目,最初使用学号作为字典的键来存储学生信息,但发现测试点中学号有重复,导致无法通过测试点3。在尝试了40分钟后,改为使用分数作为键,成功解决问题。代码中使用了`unordered_map`存储学生信息,然后按分数降序排序并输出分数在特定范围内的学生姓名和学号。
448

被折叠的 条评论
为什么被折叠?



