题意
比较长就不解释了
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e4 + 10;
typedef long long ll;
typedef pair<int, int> pii;
#define fi first
#define se second
struct node{
string id;
int score, site, date;
node(){}
node(char *s, int a)
{
id = s;
score = a;
site = stoi(id.substr(1, 3));
date = stoi(id.substr(4, 6));
}
}arr[N];
bool cmp1(const node& a, const node& b)
{
if (a.score == b.score)
return a.id < b.id;
else
return a.score > b.score;
}
bool cmp2(const pii& a, const pii& b)
{
if (a.se == b.se)
return a.fi < b.fi;
else
return a.se > b.se;
}
int main(void)
{
int i, j, temp, ca;
int n, q;
scanf("%d%d", &n, &q);
char str[N];
for (i = 1; i <= n; i++)
{
scanf("%s%d", str, &temp);
arr[i] = node(str, temp);
}
for (ca = 1; ca <= q; ca++)
{
int op;
scanf("%d ", &op);
if (op == 1)
{
char level = getchar();
printf("Case %d: %d %c\n", ca, op, level);
vector<node> res;
for (i = 1; i <= n; i++)
{
if (arr[i].id[0] == level)
res.push_back(arr[i]);
}
sort(res.begin(), res.end(), cmp1);
if (res.size() == 0)
printf("NA\n");
else
{
for (i = 0; i < res.size(); i++)
printf("%s %d\n", res[i].id.c_str(), res[i].score);
}
}
else if (op == 2)
{
scanf("%d", &temp);
printf("Case %d: %d %03d\n", ca, op, temp);
int num = 0, tot = 0;
for (i = 1; i <= n; i++)
{
if (arr[i].site == temp)
++num, tot += arr[i].score;
}
if (!num)
printf("NA\n");
else
{
printf("%d %d\n", num, tot);
}
}
else
{
scanf("%d", &temp);
printf("Case %d: %d %06d\n", ca, op, temp);
unordered_map<int, int> mp;
vector<pii> res;
for (i = 1; i <= n; i++)
{
if (arr[i].date == temp)
++mp[arr[i].site];
}
for (auto it = mp.begin(); it != mp.end(); ++it)
res.push_back(make_pair(it->fi, it->se));
sort(res.begin(), res.end(), cmp2);
if (res.size() == 0)
printf("NA\n");
else
{
for (i = 0; i < res.size(); i++)
printf("%d %d\n", res[i].fi, res[i].se);
}
}
}
}
本文介绍了一个比赛成绩管理系统的设计与实现,该系统使用C++语言,通过读取选手信息和成绩,支持按等级、地点和日期查询及排序功能。系统能够处理大量数据,提供快速查询和结果输出。
8277

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



