1 条题解

  • 0
    @ 2026-10-25 20:44:20

    思路

    千字符范围可朴素匹配,标程用KMP优化;剪出片段不能重叠,匹配后清零状态;终止符是单个#,以#开头的普通布条仍要处理。

    参考程序(C++11)

    #include <bits/stdc++.h>
    using namespace std;
    int main(){ios::sync_with_stdio(false);cin.tie(nullptr);string s,p;while(cin>>s&&s!="#"){cin>>p;vector<int>a(p.size());for(int i=1;i<(int)p.size();i++){int j=a[i-1];while(j&&p[i]!=p[j])j=a[j-1];if(p[i]==p[j])j++;a[i]=j;}int j=0,ans=0;for(char x:s){while(j&&p[j]!=x)j=a[j-1];if(p[j]==x)j++;if(j==(int)p.size()){ans++;j=0;}}cout<<ans<<'\n';}}
    
    • 1

    信息

    ID
    1516
    时间
    1000ms
    内存
    64MiB
    难度
    普及−
    标签
    递交数
    1
    已通过
    1
    上传者