题解:

显然是后缀数组

但是博主比较懒

就用了后缀trie瞎搞了一下

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=3005;
int T[N*N][2],num[N*N],cnt;
char s[N];
void dfs(int x)
{
    if (num[x]>1)printf("%d\n",num[x]);
    if (T[x][0])dfs(T[x][0]);
    if (T[x][1])dfs(T[x][1]);
}
int main()
{
    scanf("%s",&s);
    scanf("%s",&s);
    for (int i=0;s[i];i++)
     {
         int p=0;
         for (int j=i;s[j];j++)
          {
              if (!T[p][s[j]-'0'])T[p][s[j]-'0']=++cnt;
              p=T[p][s[j]-'0'];
              num[p]++;
          }
     }
    dfs(0);
}

 

posted on 2018-03-04 19:23  宣毅鸣  阅读(73)  评论(0编辑  收藏  举报