zoukankan      html  css  js  c++  java
  • [JSOI2007]文本生成器

    题目大意:给定一个字符串长度与一个字符串集,求存在该集合中元素作为子串的该长度字串数量

    思路:AC自动机+DP+容斥(全集-不合法的)

    #include"cstdio"
    #include"cstring"
    #include"iostream"
    #include"algorithm"
    using namespace std;
    
    const int MAXN=65;
    const int MAXM=105;
    const int siz=26;
    const int MOD=1e4+7;
    
    int n,m,cnt,ans;
    int q[MAXN*MAXM];
    int f[MAXM][MAXN*MAXM];
    char ch[MAXM];
    struct Trie{
    	int vis,fail;
    	int sn[siz];
    }T[MAXN*MAXM];
    
    void ins(char *ch)
    {
    	int ln=strlen(ch+1),nw=0;
    	for(int i=1;i<=ln;++i){
    		if(!T[nw].sn[ch[i]-'A']) T[nw].sn[ch[i]-'A']=++cnt;
    		nw=T[nw].sn[ch[i]-'A'];
    	}T[nw].vis=1;
    	return;
    }
    
    void Getfail()
    {
    	int hd=1,tl=0;
    	for(int i=0;i<siz;++i) if(T[0].sn[i]) q[++tl]=T[0].sn[i];
    	while(hd<=tl){
    		int nw=q[hd++];
    		T[nw].vis|=T[T[nw].fail].vis;
    		for(int i=0;i<siz;++i){
    			if(T[nw].sn[i]){
    				T[T[nw].sn[i]].fail=T[T[nw].fail].sn[i];
    				q[++tl]=T[nw].sn[i];
    			}else T[nw].sn[i]=T[T[nw].fail].sn[i];
    		}
    	}return;
    }
    
    void DP()
    {
    	for(int i=0;i<m;++i){
    		for(int j=0;j<=cnt;++j){
    			for(int k=0;k<siz;++k){
    				if(!T[T[j].sn[k]].vis){
    					f[i+1][T[j].sn[k]]+=f[i][j];
    					if(f[i+1][T[j].sn[k]]>=MOD) f[i+1][T[j].sn[k]]-=MOD;
    				}
    			}
    		}
    	}for(int i=0;i<=cnt;++i) ans=(ans+f[m][i])%MOD;
    	return;
    }
    
    int Fpw(int a,int b)
    {
    	int x=1;
    	while(b){
    		if(b&1) x=x*a%MOD;
    		b>>=1;a=a*a%MOD;
    	}return x;
    }
    
    int main()
    {
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=n;++i) scanf("%s",ch+1),ins(ch);
    	Getfail();f[0][0]=1;
    	DP();ans=(Fpw(26,m)-ans+MOD)%MOD;
    	printf("%d
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    118/119. Pascal's Triangle/II
    160. Intersection of Two Linked Lists
    168. Excel Sheet Column Title
    167. Two Sum II
    172. Factorial Trailing Zeroes
    169. Majority Element
    189. Rotate Array
    202. Happy Number
    204. Count Primes
    MVC之Model元数据
  • 原文地址:https://www.cnblogs.com/AH2002/p/10020808.html
Copyright © 2011-2022 走看看