2 条题解

  • 0
    @ 2025-10-8 16:59:35
    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const int N=2e6+5;
    int n, f[N], q[N];
    char s[N];
    int main()
    {
        scanf("%d%s", &n, s+1);
        LL ans=0;
        memset(f, 0, sizeof(f));
        for(int i=1; i<=n; i++)
        {
            q[i] = i-1;
            while(q[i] > 0 && s[q[i]] != s[i])
            {
                q[i] = q[q[i]] - 1;}
            if(q[i] > 0) f[i] = f[q[i]-1] + 1;
            ans += f[i];
        }
        printf("%lld\n", ans);
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:59:19
      #include<bits/stdc++.h>
      using namespace std;
      typedef long long LL;
      const int N=2e6+5;
      int n,f[N],q[N];
      char s[N];
      LL ans;
      int main()
      {
          scanf("%d%s",&n,s+1);
          LL ans=0;
          memset(f,0,sizeof(f));
          for(int i=1;i<=n;i++)
          {
              q[i]=i-1;
              while(q[i]>0 && s[q[i]]!=s[i])
      		{
      			q[i]=q[q[i]]-1;
      		}
              if(q[i]>0) f[i]=f[q[i]-1]+1;
      		ans+=f[i];
          }
          printf("%lld\n",ans);
          return 0;
      }
      • 1

      信息

      ID
      1967
      时间
      1000ms
      内存
      512MiB
      难度
      7
      标签
      递交数
      22
      已通过
      9
      上传者