KMP

 1 #include<cstring>
 2 #include<algorithm>
 3 #include<cstdio>
 4 using namespace std;
 5 const int maxn=2000;
 6 char a[maxn+50],s[maxn+50];
 7 int next[maxn+50][maxn+50];
 8 int len1,len,t;
 9 int main()
10 {
11     scanf("%d\n",&t);
12     while(t--)
13     {
14         s[0]='0';
15         scanf("%s",s+1);
16         len=strlen(s);
17         for(int k=1;k<len;++k)
18         {
19             int j=k-1;
20             next[k][k]=k-1;
21             for(int i=k+1;i<len;++i)
22             {
23                 while(j>=k&&s[j+1]!=s[i]) j=next[k][j];
24                 if(s[j+1]==s[i]) ++j;
25                 next[k][i]=j;
26             }
27         }
28         long long ans=0;
29         for(int k=1;k<len;++k)
30         {
31             int j=k-1;
32             for(int i=1;i<len;++i)
33             {
34                 while(j>=k&&s[j+1]!=s[i]) j=next[k][j];
35                 if(s[j+1]==s[i]) ++j;
36                 ans^=1LL*(i-(j-k+1))*(j-k+1)*(j-k+1)*(len-1-j);
37                 if(j==len-1) j=next[k][j];
38             }
39         }
40         printf("%lld\n",ans);
41     }
42     return 0;
43 }
View Code

相关文章:

  • 2022-03-04
  • 2021-10-30
  • 2021-10-25
  • 2022-02-04
  • 2021-06-16
  • 2022-01-11
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-12-15
  • 2021-05-16
  • 2021-06-06
  • 2022-12-23
  • 2022-12-23
  • 2021-09-22
相关资源
相似解决方案