1 条题解

  • 0
    @ 2025-8-24 21:16:59

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 一扶苏一
    休息结束。邮箱 yifusuyi@qq.com

    搬运于2025-08-24 21:16:58,当前版本为作者最后更新于2024-12-18 21:16:30,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


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

    Source & Knowledge

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

    文字题解

    题目大意

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

    解析

    读入

    首先读取队伍数量 n 和队伍名称,然后读取字典的大小 m 和字典中的字符串。

    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] 作为子串。

    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] 结尾的部分。
    • 1

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

    信息

    ID
    11105
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    0
    已通过
    0
    上传者