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

一扶苏一
休息结束。邮箱 yifusuyi@qq.com搬运于
2025-08-24 21:15:15,当前版本为作者最后更新于2023-08-16 14:41:57,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
Source & Knowledge
2023 年 08 月语言月赛,由洛谷网校入门计划/基础计划提供。
本题考察字符串处理。
文字题解
题意简述
给出一份 个人的名单,要求将 个人从名单中删去,再加入 个人。按字典序输出最终的名单。
解析
90 分算法
当 时,可以用一个大小为 的
string数组存储这个名单:string s[201];。首先读入名单上初始 个人名:
for (int i = 1; i <= n; ++i) cin >> s[i];然后读入 个要被删去的人名。枚举名单上每一个人直到找到对应的人,然后将之置为空串,表示删去:
for (int i = 1; i <= m; ++i) { string t; cin >> t; for (int j = 1; j <= n; ++j) if (s[j] == t) { s[j] = ""; } }最后读入 个新增的人名:
for (int i = n + 1; i <= n + l; ++i) cin >> s[i];为了将它们从小到大排序,需要使用
sort(s + 1, s + 1 + n + l)来把这些字符串排序。如果不会使用sort,也可以自己写一个冒泡排序。最后,按从小到大的顺序输出这些字符串就可以了。需要注意的是,被置为空串的字符串不应该输出:
for (int i = 1; i <= n + l; ++i) if (s[i] != "") cout << s[i] << '\n';100 分算法
可以使用 STL 中的
set完成上述操作。set是一个容器,它可以支持向容器中插入一个元素、删除一个元素和按从小到大的顺序输出。声明方式是:set<string> s;。读入初始名单只需要使用
set的insert方法把字符串插入 set 中:for (int i = 1; i <= n; ++i) { string t; s.insert(t); }删除字符串只需要使用
set的erase方法:for (int i = 1; i <= n; ++i) { string t; s.erase(t); }最后再按与读入初始名单类似的方法读入剩下的 个名字即可。
在输出部分,因为 set 中元素本身自动按从小到大排序,所以只需要使用 range for 语法,直接遍历 set 输出即可。注意这一语法需要使用到 c++11 及以上编译标准。可以查看视频题解了解如何在编译时开启 C++11 及以上标准。
for (auto t : s) cout << t << '\n';
视频题解
等待上传。
- 1
信息
- ID
- 9048
- 时间
- 2000ms
- 内存
- 512MiB
- 难度
- 2
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者