专栏文章

题解 B4086

B4086题解参与者 6已保存评论 5

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
5 条
当前快照
1 份
快照标识符
@miqqrgw4
此快照首次捕获于
2025/12/04 09:12
3 个月前
此快照最后确认于
2025/12/04 09:12
3 个月前
查看原文

[语言月赛 202412] 正在联系教练退赛 题解

Source & Knowledge

本题来源于 2024 年 12 月的语言月赛,主要考察字符串操作和循环结构。

文字题解

题目大意

题目要求检查每支队伍的名称是否包含主办方字典中的任何字符串作为子串。如果包含,则输出 "Yes",表示该队伍需要退赛;否则输出 "No"。

解析

读入

首先读取队伍数量 n 和队伍名称,然后读取字典的大小 m 和字典中的字符串。
CPP
int n, m;
cin >> n;
for (int i = 0; i < n; ++i) {
    cin >> s[i];
}
cin >> m;
for (int i = 0; i < m; ++i) {
    cin >> t[i];
}

检查子串

对于每个队伍名称 s[i],我们需要检查它是否包含字典中的任何一个字符串 t[j] 作为子串。
CPP
for (int i = 0; i < n; ++i) {
    bool flag = false; // 标记是否需要退赛
    for (int j = 0; j < m; ++j) {
        // 检查 s[i] 中是否包含 t[j]
        for (int p = 0; p < int(s[i].size()); ++p) {
            // substr 的第二个参数是子串长度,如果超出范围,它会返回剩余的部分
            if (s[i].substr(p, t[j].size()) == t[j]) {
                flag = true;
                break; // 找到子串,跳出内层循环
            }
        }
        if (flag) break; // 队伍需要退赛,跳出外层循环
    }
    // 根据标记输出结果
    if (flag) cout << "Yes\n";
    else cout << "No\n";
}

输出

根据上述检查,输出每支队伍是否需要退赛的结果。

代码注释

  • s[i].substr(p, t[j].size()):使用 substr 函数来获取 s[i] 从位置 p 开始长度为 t[j].size() 的子串。如果 p + t[j].size() 超出了 s[i] 的长度,substr 将只返回从 p 开始到 s[i] 结尾的部分。

评论

5 条评论,欢迎与作者交流。

正在加载评论...