1 条题解

  • 1
    @ 2025-11-23 15:29:32
    #include<bits/stdc++.h>
    using namespace std;
    const int N=2e6+10;
    int b[N],len1,len2,lens;
    string s1,s2,ss;
    int main(){
        ios::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr);
        cin>>s1>>s2;
        ss=s2+"@"+s1;
        len1=s1.size();len2=s2.size();lens=ss.size();
        int j=0;
        for(int i=1;i<lens;i++){
            while(j>0&&ss[i]!=ss[j]){
                j=b[j-1];
            }
            if(ss[i]==ss[j]){
                j++;
            }
            b[i]=j;
        }
        for(int i=len2+1;i<=len1+len2;i++){
            if(b[i]==len2){
                cout<<i-len2-len2+1<<"\n";
            }
        }
        for(int i=0;i<len2;i++){
            cout<<b[i]<<" ";
        }
        return 0;
    }
    
    
    

    信息

    ID
    7405
    时间
    1000ms
    内存
    512MiB
    难度
    6
    标签
    递交数
    60
    已通过
    30
    上传者