1 条题解
-
0
自动搬运
来自洛谷,原作者为

一扶苏一
休息结束。邮箱 yifusuyi@qq.com搬运于
2025-08-24 21:16:59,当前版本为作者最后更新于2024-12-18 21:32:50,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
[语言月赛 202412] 吃饭大赛总决赛 题解
Source & Knowledge
本题来源于 2024 年 12 月的语言月赛,主要考察结构体、数组以及逻辑判断的使用。
文字题解
【结构体定义】
我们采用这样一个结构体来维护一支队伍的信息struct Team { string name; string number[3]; Team(string x, string y, string z, string w) { name = x; number[0] = y; number[1] = z; number[2] = w; } Team() {} }【数据读入】
我们用Team rank[i][j]这个数据表示第 场比赛的 第 名,根据题意读入信息并存储到数组里:std::cin >> n >> m >> t >> k; for (int i = 1; i <= n; ++i) { std::string a, b, c, d; int x, y; std::cin >> a >> b >> c >> d >> x >> y; rank[y][x] = Team(a, b, c, d); }【数据存储】
为了判定每个人是否已经晋级 ec,我们用一个数组string ecNumber[5000]来存储所有当前已经晋级 ec 的队员姓名,int ecNumberCnt表示当前晋级的人员数量;Team ecTeam[5000]来存储当前所有晋级 ec 的队伍信息,int ecCnt来存储当前晋级的队伍数量。接下来,按题意先枚举排名,再枚举比赛编号,判断每支队伍是否可以晋级
for (int i = 1; i <= t; ++i) { for (int j = 1; j <= m; ++j) if (rank[i][j].name.size() != 0) { // name 的长度不是 0 说明这里有队伍信息 if (ecCnt >= k) break; bool ok = true; for (int u = 0; u < 3; ++u) { string x = rank[i][j].number[u]; for (int t = 0; t < ecNumberCnt; ++t) if (x == ecNumber[t]) { // 遍历晋级人员名单,检查 x 是否已晋级 ok = false; } } if (!ok) continue; // 有人员晋级则该队伍无法再晋级 ecTeam[ecCnt++] = rank[i][j]; for (int u = 0; u < 3; ++u) { string x = rank[i][j].number[u]; ecNumber[ecNumberCnt++] = x; } } }最后,ecCnt 就是所有晋级的队伍,按规定输出即可。
- 1
信息
- ID
- 11106
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者