1 条题解

  • 0
    @ 2025-10-8 16:52:22
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1110000;
    char sa[N], sb[N];
    int pre[N];
    
    int main() 
    {
        int T;scanf("%d", &T);
        while(T--) 
    	{
            scanf("%s", sa+1);scanf("%s", sb+1);
            int lena=strlen(sa+1), lenb=strlen(sb+1);
            memset(pre, 0, sizeof(pre));
            for(int i=1, j=pre[i]; i<lena; i++, j=pre[i]) 
    		{
                while( j>0 && sa[i+1]!=sa[j+1]) j=pre[j];
                if(sa[i+1]==sa[j+1])pre[i+1]=j+1;
            }
            int ans=0;
            for(int i=0, j=0; i<lenb; i++) 
    		{
                while( j>0 && sb[i+1]!=sa[j+1]) j=pre[j];
                if(sb[i+1]==sa[j+1]) j++;
                if(j==lena) ans++;
            }
            printf("%d\n", ans);
        }
        return 0;
    }
    
    • 1

    信息

    ID
    576
    时间
    1000ms
    内存
    128MiB
    难度
    4
    标签
    递交数
    104
    已通过
    47
    上传者