2 条题解

  • 0
    @ 2025-10-8 16:57:37
    #include<bits/stdc++.h>
    using namespace std;
    const int N=2e5+10,base=13331;
    char s1[N],s2[N];
    int h[2][N],d[N];
    int ans[N];
    int hashA(int l,int r){return h[0][r]-h[0][l-1]*d[r-l+1];}
    int hashB(int l,int r){return h[1][r]-h[1][l-1]*d[r-l+1];}
    int main()
    {
        int n,m,q;scanf("%d%d%d",&n,&m,&q);
        scanf("%s",s1+1);
        scanf("%s",s2+1);
        int nm=max(n,m);
        d[0]=1;for(int i=1;i<=nm;i++)d[i]=d[i-1]*base;
        for(int i=1;i<=n;i++)h[0][i]=h[0][i-1]*base+s1[i]-'a';
        for(int i=1;i<=m;i++)h[1][i]=h[1][i-1]*base+s2[i]-'a';
        for(int i=1;i<=n;i++)
    	{
            int l=i,r=min(i+m-1,n),mid,t=0;
            while(l<=r)
    		{
                mid=l+r>>1;
                if(hashA(i,mid)!=hashB(1,mid-i+1))r=mid-1;
                else t=mid-i+1,l=mid+1; 
            }
            ans[t]++;
        }
        while(q--)
    	{
            int x;scanf("%d",&x);
            printf("%d\n",ans[x]);
        }
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:57:28
      #include<bits/stdc++.h>
      using namespace std;
      const int N=2e5+10,base=13331;
      char s1[N],s2[N];
      int h[2][N],d[N];
      int ans[N];
      int hashA(int l,int r){return h[0][r]-h[0][l-1]*d[r-l+1];}
      int hashB(int l,int r){return h[1][r]-h[1][l-1]*d[r-l+1];}
      int main()
      {
          int n,m,q;scanf("%d%d%d",&n,&m,&q);
          scanf("%s",s1+1);
          scanf("%s",s2+1);
          int nm=max(n,m);
          d[0]=1;for(int i=1;i<=nm;i++)d[i]=d[i-1]*base;
          for(int i=1;i<=n;i++)h[0][i]=h[0][i-1]*base+s1[i]-'a';
          for(int i=1;i<=m;i++)h[1][i]=h[1][i-1]*base+s2[i]-'a';
          for(int i=1;i<=n;i++)
      	{
              int l=i,r=min(i+m-1,n),mid,t=0;
              while(l<=r)
      		{
                  mid=l+r>>1;
                  if(hashA(i,mid)!=hashB(1,mid-i+1))r=mid-1;
                  else t=mid-i+1,l=mid+1; 
              }
              ans[t]++;
          }
          while(q--)
      	{
              int x;scanf("%d",&x);
              printf("%d\n",ans[x]);
          }
          return 0;
      }
      • 1

      信息

      ID
      1507
      时间
      1000ms
      内存
      64MiB
      难度
      5
      标签
      递交数
      73
      已通过
      30
      上传者