40分求助
查看原帖
40分求助
750240
Hellsing_Alucard楼主2023/4/16 10:07

孩子受不了了啊~~

40pts求调,wa#1,#6,#7,#8,#9,#10

#include <bits/stdc++.h>

using namespace std;

#define int long long

const int mod=10007;

inline int read(){
    char c=getchar();int x=0,fh=0;
    while(c<'0'||c>'9'){fh|=c=='-';c=getchar();}
    while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
    return fh?-x:x;
}
struct node{
	int son[26];
	int ed;
}tr[58600];
int cnt,fail[200500],vis[250050],f[8500][150];
int n,m;
inline int ksm(int a,int b){
	int res=1;
	while(b){
		if(b&1)res=(res*a)%mod;
		a=(a*a)%mod;
		b>>=1;
	}
	return res;
}
inline void insert(string s){
	int p=0;
	for(int i=0;i<s.size();i++){
		int ch=s[i]-'A';
		if(!tr[p].son[ch])tr[p].son[ch]=++cnt;
		p=tr[p].son[ch];
	}
	tr[p].ed=1;
}
queue<int>q;
inline void getfail(){
	for(int i=0;i<26;i++){
		if(tr[0].son[i]){
			q.push(tr[0].son[i]);
		}
	}
	while(q.size()){
		int u=q.front();q.pop();
		for(int i=0;i<26;i++){
			int v=tr[u].son[i];
			if(v){
				fail[v]=tr[fail[u]].son[i];
				q.push(v);
				tr[v].ed|=tr[fail[v]].ed;
			}
			else tr[u].son[i]=tr[fail[u]].son[i]; 
		}
	}
}

inline void clear(){
	memset(tr,0,sizeof tr);
	memset(fail,0,sizeof fail);
	memset(vis,0,sizeof vis);
	cnt=0;
}
inline void solve(){
	f[0][0] = 1;
	for(int i=1;i<=m;i++){
		for(int j=0;j<=cnt;j++){
			if(!tr[j].ed){
				for(int k=0;k<26;k++)f[i][tr[j].son[k]]=(f[i][tr[j].son[k]]+f[i-1][j])%mod;
			}	
		}
	}
	int ans = 0;
	for(int j=0;j<=cnt;j++){
		if(!tr[j].ed){
			ans=(ans+f[m][j])%mod;
		}
	}
	cout<<((ksm(26,m)-ans)%mod+mod)%mod;
}
signed main(){
	ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	cin>>n>>m;
	string a;
	for(int i=1;i<=n;i++){
		cin>>a;
		insert(a);
	}
	getfail();
	solve();
	return 0;
}
2023/4/16 10:07
加载中...