【bzoj1030】 JSOI2007—文本產生器

來源:互聯網
上載者:User

標籤:[1]   inf   枚舉   www   amp   ios   i++   blank   build   

http://www.lydsy.com/JudgeOnline/problem.php?id=1030 (題目連結)

題意

  給出$n$個單詞,問有多少個長度為$m$的文本中至少包含一個單詞。

Solution

  構造好AC自動機以後在上面dp,$f[i][j]$表示長度為$i$匹配到自動機上節點$j$時的沒有被任意單詞匹配的文本個數。轉移枚舉接在第$j+1$個位置的字元是哪一個,並且保證走過的節點沒有一個是結束節點就可以了。

細節

  0號節點為root。

代碼
// bzoj1030#include<algorithm>#include<iostream>#include<cstdlib>#include<cstring>#include<cstdio>#include<cmath>#include<queue>#define LL long long#define inf (1ll<<30)#define MOD 10007#define Pi acos(-1.0)#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout)using namespace std;const int maxl=200,maxn=60;int n,m,sz=1,f[maxl][maxn*maxl];char s[maxl];struct node {int son[26],next,end;int& operator [] (int x) {return son[x];}}tr[maxn*maxl];namespace ACM {void insert(char *r) {int len=strlen(r+1),p=1;for (int i=1;i<=len;i++) {if (!tr[p][r[i]-‘A‘]) tr[p][r[i]-‘A‘]=++sz;p=tr[p][r[i]-‘A‘];}tr[p].end=1;}void buildfail() {queue<int> q;q.push(1);tr[1].next=0;while (!q.empty()) {int x=q.front();q.pop();for (int i=0;i<26;i++) if (tr[x][i]) {int k=tr[x].next;while (!tr[k][i]) k=tr[k].next;tr[tr[x][i]].next=tr[k][i];tr[tr[x][i]].end|=tr[tr[k][i]].end;q.push(tr[x][i]);}}}}using namespace ACM;int main() {scanf("%d%d",&n,&m);for (int i=0;i<26;i++) tr[0][i]=1;for (int i=1;i<=n;i++) {scanf("%s",s+1);insert(s);}buildfail();f[0][1]=1;for (int i=0;i<m;i++)for (int j=1;j<=sz;j++) if (f[i][j]) {for (int k=0;k<26;k++) {int p=j;while (!tr[p][k]) p=tr[p].next;p=tr[p][k];if (!tr[p].end) (f[i+1][p]+=f[i][j])%=MOD;}}int sum=1,ans=0;for (int i=1;i<=m;i++) (sum*=26)%=MOD;for (int i=1;i<=sz;i++) (ans+=f[m][i])%=MOD;printf("%d\n",(sum-ans+MOD)%MOD);return 0;}

 

【bzoj1030】 JSOI2007—文本產生器

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.