90pts求调
查看原帖
90pts求调
1277550
cx2021hjxhjx楼主2024/6/20 20:54

rt

#include<bits/stdc++.h>
using namespace std;
inline int max(int &a,int &b){
	return a>b?a:b;
}
struct data{
    int nxt[27];
	bool end;
}a[205];
int ans,n,m,cnt,len;
char q[2000010];
bool vis[2000010];
inline void read_q(){
    char c=getchar();
	len=0;
    while(c<'a'||c>'z') c=getchar();
    while('a'<=c&&c<='z') q[len++]=c,c=getchar();
}
inline void insert(){
    read_q();
    int u=0;
    for(int i=0;i<len;i++){
        int p=q[i]-'a';
        if(!a[u].nxt[p]) a[u].nxt[p]=++cnt;
        u=a[u].nxt[p];
    }
    a[u].end=1;
}
inline void match(int x){
    if(vis[x]) return;
    vis[x]=1;
    ans=max(ans,x);
    int u=0;
    for(int i=x;i<len;i++){
        int p=q[i]-'a';
        if(!a[u].nxt[p]) return;
        u=a[u].nxt[p];
        if(a[u].end) match(i+1);
    }
}
inline void query(){
    read_q();
    memset(vis,0,sizeof vis);
    ans=0;
    match(0);
    printf("%d\n",ans);
}
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++) insert();
    for(int i=1;i<=m;i++) query();
    return 0;
}
2024/6/20 20:54
加载中...