青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

poj1625

Censored!
Time Limit: 5000MS Memory Limit: 10000K
Total Submissions: 5865 Accepted: 1569

Description

The alphabet of Freeland consists of exactly N letters. Each sentence of Freeland language (also known as Freish) consists of exactly M letters without word breaks. So, there exist exactly N^M different Freish sentences.

But after recent election of Mr. Grass Jr. as Freeland president some words offending him were declared unprintable and all sentences containing at least one of them were forbidden. The sentence S contains a word W if W is a substring of S i.e. exists such k >= 1 that S[k] = W[1], S[k+1] = W[2], ...,S[k+len(W)-1] = W[len(W)], where k+len(W)-1 <= M and len(W) denotes length of W. Everyone who uses a forbidden sentence is to be put to jail for 10 years.

Find out how many different sentences can be used now by freelanders without risk to be put to jail for using it.

Input

The first line of the input file contains three integer numbers: N -- the number of letters in Freish alphabet, M -- the length of all Freish sentences and P -- the number of forbidden words (1 <= N <= 50, 1 <= M <= 50, 0 <= P <= 10).

The second line contains exactly N different characters -- the letters of the Freish alphabet (all with ASCII code greater than 32).

The following P lines contain forbidden words, each not longer than min(M, 10) characters, all containing only letters of Freish alphabet.

Output

Output the only integer number -- the number of different sentences freelanders can safely use.

Sample Input

2 3 1
ab
bb

Sample Output

5

Source

Northeastern Europe 2001, Northern Subregion

傷不起啊
用c++交re到死
用g++交就過了

ac自動機+dp+高精度

傷不起啊
狀態還是用trie圖表示和轉移
方程 f[i][j]=f[i][j]+f[i-1][k]*g[k][j];
g[k][j]表示從狀態k轉移到狀態j的邊數

  1#include <cstdio>
  2#include <cstdlib>
  3#include <cstring>
  4#include <cmath>
  5#include <ctime>
  6#include <cassert>
  7#include <iostream>
  8#include <sstream>
  9#include <fstream>
 10#include <map>
 11#include <set>
 12#include <vector>
 13#include <queue>
 14#include <algorithm>
 15#include <iomanip>
 16#define maxn 105
 17#define pp printf("here\n")
 18using namespace std;
 19struct node
 20{
 21    int next[52];
 22    int fail,count;
 23    void init()
 24    {
 25        memset(next,-1,sizeof(next));
 26        fail=-1;
 27        count=0;
 28    }

 29}
 s[1005];
 30struct bignum
 31{
 32#define MAXCOUNT 10000
 33#define maxlen 105
 34    int x[maxlen];
 35    int len;
 36    // int zzz;
 37    void init()
 38    {
 39        memset(x,0,sizeof(x));
 40        // zzz=1;
 41    }

 42}
 f[105][105];
 43int n,m,p,sind;
 44int hash[800];
 45int q[505],head,tail;
 46int g[105][105];
 47void print(bignum a)
 48{
 49    cout<<a.x[a.len];
 50    for(int i=a.len-1; i>=1; i--)
 51    {
 52        if(a.x[i]<1000) putchar('0');
 53        if(a.x[i]<100) putchar('0');
 54        if(a.x[i]<10) putchar('0');
 55        printf("%d",a.x[i]);
 56    }

 57    printf("\n");
 58}

 59void mulanum(bignum &a,int b)
 60{
 61    int x;
 62    x=MAXCOUNT;
 63    for(int i=1; i<=a.len; i++)
 64        a.x[i]=a.x[i]*b;
 65    for(int i=1; i<=a.len; i++)
 66    {
 67        a.x[i+1]+=a.x[i]/x;
 68        a.x[i]=a.x[i]%x;
 69    }

 70    while(a.x[a.len+1]>0)
 71    {
 72        a.len++;
 73        a.x[a.len+1]=a.x[a.len]/x;
 74        a.x[a.len]%=x;
 75    }

 76}

 77void addabignum(bignum &a,bignum b)
 78{
 79    int  x;
 80    x=MAXCOUNT;
 81    a.len=max(a.len,b.len);
 82   // printf("%d\n",a.len);
 83    for(int i=1; i<=a.len; i++)
 84        a.x[i]=a.x[i]+b.x[i];
 85    for(int i=1; i<=a.len; i++)
 86    {
 87        a.x[i+1]+=a.x[i]/x;
 88        a.x[i]=a.x[i]%x;
 89    }

 90    while(a.x[a.len+1]>0)
 91    {
 92        a.len++;
 93        a.x[a.len+1]=a.x[a.len]/x;
 94        a.x[a.len]%=x;
 95    }

 96}

 97void cas_init()
 98{
 99    s[0].init();
100    sind=1;
101}

102void ins(char str[])
103{
104    int i,j,ind;
105    int len=strlen(str);
106    ind=0;
107    for(int i=0;i<len;i++)
108    {
109        j=hash[str[i]+128];
110        if(s[ind].next[j]==-1)
111        {
112            s[sind].init();
113            s[ind].next[j]=sind++;
114        }

115        ind=s[ind].next[j];
116    }

117    s[ind].count++;
118}

119void make_fail()
120{
121    int p,i,son,u;
122    head=0;
123    tail=1;
124    q[tail]=0;
125    while(head<tail)
126    {
127        u=q[++head];
128        for(i=0; i<n; i++)
129        {
130            if(s[u].next[i]!=-1)
131            {
132                p=s[u].fail;
133                son=s[u].next[i];
134                while(p!=-1&&s[p].next[i]==-1) p=s[p].fail;
135                if(u==0) s[son].fail=0;
136                else s[son].fail=s[p].next[i];
137                if(s[s[son].fail].count) s[son].count=1;
138                q[++tail]=son;
139            }

140           else
141            {
142                p=s[u].fail;
143                while(p!=-1&&s[p].next[i]==-1) p=s[p].fail;
144                if(u==0) s[u].next[i]=0;
145                else s[u].next[i]=s[p].next[i];
146            }

147
148        }

149    }

150}

151void make_mats()
152{
153    int i,j,son;
154    memset(g,0,sizeof(g));
155    for(i=0; i<sind; i++)
156    {
157        if(s[i].count) continue;
158        for(j=0; j<n; j++)
159        {
160            son=s[i].next[j];
161            if(s[son].count) continue;
162            g[i][son]++;
163        }

164    }

165}

166void solve()
167{
168    int son;
169    bignum tmp;
170    // pp;
171    for(int i=0;i<=m;i++)
172    {
173        for(int j=0;j<sind;j++)
174        f[i][j].init();
175    }

176    f[0][0].len=1;
177    f[0][0].x[1]=1;
178    for(int i=1; i<=m; i++)
179    {
180        for(int j=0; j<sind; j++)
181        {
182            if(s[j].count) continue;
183            //f[i][j].init();
184            f[i][j].len=1;
185            //for(int k=0; k<j; k++)
186            //if(s[k].count==0)
187            for(int k=0; k<sind; k++)
188            {
189               // son=s[j].next[k];
190                if(s[son].count) continue;
191                tmp=f[i-1][k];
192                //printf("tmp=");print(tmp);
193                mulanum(tmp,g[k][j]);
194                addabignum(f[i][j],tmp);
195            }

196        }

197    }

198    bignum res;
199    res.init();
200    res.len=1;
201    for(int i=0; i<sind; i++)
202    addabignum(res,f[m][i]);
203    print(res);
204}

205int main()
206{
207    char str[105];
208    scanf("%d%d%d",&n,&m,&p);
209    cas_init();
210    gets(str);
211   // cout<<str<<endl;
212   gets(str);
213   for(int i=0;i<n;i++) hash[str[i]+128]=i;
214    for(int i=1; i<=p; i++)
215    {
216        gets(str);
217        ins(str);
218    }

219    make_fail();
220    make_mats();
221    solve();
222    return 0;
223}

224

code


posted on 2012-08-02 00:41 jh818012 閱讀(144) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

導航

統計

常用鏈接

留言簿

文章檔案(85)

搜索

最新評論

  • 1.?re: poj1426
  • 我嚓,,輝哥,,居然搜到你的題解了
  • --season
  • 2.?re: poj3083
  • @王私江
    (8+i)&3 相當于是 取余3的意思 因為 3 的 二進制是 000011 和(8+i)
  • --游客
  • 3.?re: poj3414[未登錄]
  • @王私江
    0ms
  • --jh818012
  • 4.?re: poj3414
  • 200+行,跑了多少ms呢?我的130+行哦,你菜啦,哈哈。
  • --王私江
  • 5.?re: poj1426
  • 評論內容較長,點擊標題查看
  • --王私江
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久人人97超碰精品888| 亚洲国产你懂的| 国产偷久久久精品专区| 国内成+人亚洲+欧美+综合在线| 一区二区在线观看av| 亚洲伦理在线观看| 午夜精品亚洲一区二区三区嫩草| 久久精品免费播放| 亚洲国产成人91精品 | 99re6热在线精品视频播放速度| 中文国产成人精品久久一| 久久本道综合色狠狠五月| 欧美紧缚bdsm在线视频| 国产精品入口| 亚洲国产精品一区二区久| 亚洲一区中文| 另类成人小视频在线| 亚洲三级电影在线观看| 欧美在线观看网址综合| 欧美日韩精品免费观看| 狠狠色丁香久久婷婷综合_中| 一道本一区二区| 久久夜色精品国产亚洲aⅴ| av成人免费观看| 久久亚洲综合网| 国产精品青草久久久久福利99| 亚洲欧洲午夜| 久久久青草青青国产亚洲免观| 日韩视频第一页| 玖玖玖国产精品| 国产精品一区二区视频| 日韩视频在线观看免费| 老司机精品久久| 亚洲免费综合| 欧美日韩视频第一区| 亚洲国产精彩中文乱码av在线播放| 午夜日韩电影| 亚洲精品无人区| 久久综合精品一区| 国产在线视频欧美一区二区三区| 亚洲一区二区在线免费观看视频 | 久久精品国产久精国产思思| 日韩视频一区二区三区在线播放免费观看| 欧美a级大片| 亚洲自拍偷拍视频| 欧美区在线观看| 亚洲国产成人一区| 久久久久久久久一区二区| 一区二区三区黄色| 欧美精品久久久久久久久久| 在线国产精品一区| 久久久午夜精品| 午夜精彩国产免费不卡不顿大片| 欧美日韩国产综合久久| 亚洲精品一级| 欧美成人综合| 久久精品女人| 国产综合在线看| 久久精品夜色噜噜亚洲aⅴ| 亚洲一区在线视频| 国产精品mm| 亚洲一区二区三区精品在线观看| 亚洲激情在线观看| 免费亚洲一区二区| 亚洲国产另类精品专区| 欧美~级网站不卡| 久久久在线视频| 狠狠色狠狠色综合日日五| 久久久蜜臀国产一区二区| 欧美一级视频精品观看| 国产免费观看久久| 性色一区二区| 亚洲欧美视频在线观看视频| 国产精品每日更新| 午夜视频在线观看一区| 亚洲一区在线播放| 国产伦精品一区二区三区四区免费| 亚洲欧美在线一区二区| 亚洲在线视频| 国产日本欧美视频| 久久精品视频播放| 久久成人羞羞网站| 在线观看日韩专区| 欧美激情亚洲一区| 欧美激情一区二区三区成人| 一区二区91| 亚洲午夜高清视频| 国产欧美亚洲精品| 久久综合九色欧美综合狠狠| 噜噜噜91成人网| 99精品黄色片免费大全| 一区二区日韩精品| 国产精品综合| 久久久免费精品| 免费在线视频一区| 一区二区三区鲁丝不卡| 中文av一区特黄| 国产在线精品自拍| 欧美二区在线| 欧美日韩一区二区免费视频| 性色av一区二区三区| 久久免费视频在线| 99国产精品私拍| 亚洲婷婷综合色高清在线| 国产日韩欧美一区二区三区四区| 美女日韩在线中文字幕| 欧美精品久久久久a| 性久久久久久久久| 久久久久欧美精品| 一本到高清视频免费精品| 亚洲一二三区在线| 黄色综合网站| 亚洲精品影院在线观看| 国产伦精品免费视频| 欧美高清不卡| 国产精品久久| 久久综合色一综合色88| 欧美另类视频| 久久成人精品视频| 欧美刺激午夜性久久久久久久| 亚洲一级片在线观看| 欧美在线免费播放| 99精品久久久| 久久成人免费视频| 一本久道综合久久精品| 午夜精品久久久久久久男人的天堂| 1000精品久久久久久久久| 日韩亚洲欧美综合| 国内外成人在线视频| 亚洲精品乱码久久久久久蜜桃91| 国产精品一区二区视频| 亚洲国产成人av在线| 国产日韩欧美在线看| 亚洲经典在线| 国产丝袜一区二区三区| 亚洲精品精选| 国一区二区在线观看| 99成人在线| **欧美日韩vr在线| 亚洲欧美一级二级三级| av成人免费观看| 久久国产精品久久w女人spa| 亚洲一区二区av电影| 久久在线播放| 欧美一区二区啪啪| 欧美精品网站| 久久综合色一综合色88| 国产精品美女黄网| 亚洲人成网在线播放| 韩国视频理论视频久久| 亚洲色无码播放| 亚洲精品一区二区三区在线观看 | 午夜一区二区三视频在线观看 | 欧美成人在线影院| 国产伦精品一区二区三区视频黑人| 亚洲国产美女久久久久| 国产在线视频欧美一区二区三区| 在线视频免费在线观看一区二区| 亚洲国产精品久久精品怡红院| 亚洲欧美日韩在线观看a三区| 一本色道久久88综合亚洲精品ⅰ | 99视频在线观看一区三区| 在线看视频不卡| 亚洲欧美日本精品| 亚洲视频电影在线| 欧美成人精品在线| 久久亚洲美女| 国产色综合天天综合网| 一区二区欧美精品| 亚洲婷婷免费| 欧美激情在线免费观看| 欧美大片在线观看一区| 黄色在线一区| 久久国产欧美| 久久精品人人爽| 国产精品一区2区| 一区二区三区四区五区精品视频 | 亚洲色图自拍| 欧美精品色综合| 亚洲国产精品黑人久久久 | 欧美激情在线有限公司| 欧美激情一区二区三区成人| 亚洲成人在线视频网站| 久久精品亚洲| 久久久蜜桃精品| 狠狠久久亚洲欧美专区| 欧美伊人久久| 久久精品在线| 国产自产女人91一区在线观看| 午夜在线不卡| 久久精品系列| 国内伊人久久久久久网站视频| 久久国产精品99久久久久久老狼| 久久久久久电影| 黄色亚洲在线| 毛片av中文字幕一区二区| 女同性一区二区三区人了人一| 亚洲成人在线观看视频| 蜜桃精品久久久久久久免费影院| 欧美二区视频|