1 条题解

  • 0
    @ 2025-10-8 16:51:29
    #include <bits/stdc++.h>
    using namespace std;
    const int N = 1e6 + 10;
    char c[20], s[N];
    int main()
    {
        cin.getline(c, sizeof(c));
        cin.getline(s, sizeof(s));
        int clen = strlen(c);
        int slen = strlen(s);
        for (int i = 0; i < clen; i++)
            if (c[i] >= 'A' && c[i] <= 'Z')
                c[i] = c[i] - 'A' + 'a';
        for (int i = 0; i < slen; i++)
            if (s[i] >= 'A' && s[i] <= 'Z')
                s[i] = s[i] - 'A' + 'a';
        int sum = 0, p = -1;
        for (int i = 0, k = 0; i <= slen - clen; i++) // 搜索第一个字母,如果第slen-clen+1或以上的字母匹配也没用,后面也不够装
            if (s[i] == c[0] && (i == 0 || s[i - 1] == ' ')) // 是否与第一个字母匹配,前一位是不是空格,但还可能是第一位
            {
                for (int j = 1; j < clen; j++) // 逐一匹配
                    if (s[i + j] != c[j])
                    {
                        k = 1; // 并不匹配
                        break;
                    }
                if (k == 0 && (i + clen == slen || s[i + clen] == ' '))
                {
                    sum++;
                    if (p == -1)
                        p = i; // 记录第一个
                }
                k = 0; // 归零,这个很重要!!!
            }
        if (p == -1)
            printf("-1\n");
        else
            printf("%d %d\n", sum, p);
        return 0;
    }
    
    • 1

    【字符串基础】[NOIP 2011 普及组] 统计单词数

    信息

    ID
    664
    时间
    1000ms
    内存
    128MiB
    难度
    5
    标签
    递交数
    91
    已通过
    36
    上传者