题解:
显然是后缀数组
但是博主比较懒
就用了后缀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); }