
#include#include #include typedef long long ll; using namespace std; const int N=10010,S=55,M=1000010; int n; int tr[N*S][26],cnt[N*S],idx; char str[M]; int q[N*S],ne[N*S]; void insert() { int p=0,t; for(int i=0;str[i];i++) { t=str[i]-'a'; if(!tr[p][t]) tr[p][t]=++idx; p=tr[p][t]; } cnt[p]++; } void build() { int hh=0,tt=-1,i,t; for(i=0;i<26;i++) { if(tr[0][i]) q[++tt]=tr[0][i]; } while(hh<=tt) { t=q[hh++];//队列中的节点 for(i=0;i<26;i++) { int c=tr[t][i];//子节点 右 if(!c) continue; int j=ne[t]; while(j&&!tr[j][i]) j=ne[j]; if(tr[j][i]) j=tr[j][i]; ne[c]=j; q[++tt]=c; } } } int main() { int t,n,i,j; scanf("%d",&t); while(t--) { memset(tr,0,sizeof(tr)); memset(cnt,0,sizeof(cnt)); memset(ne,0,sizeof(ne)); idx=0; scanf("%d",&n); for(i=0;i 欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)