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

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>
            免费成人av在线看| 欧美精品国产一区二区| 免费视频一区二区三区在线观看| 影音先锋亚洲电影| 日韩视频在线播放| 在线看一区二区| 久久成人精品电影| 欧美人与禽性xxxxx杂性| 欧美一区二区三区另类 | 亚洲第一视频| 麻豆成人在线观看| 久久精品国产精品| 国产精品久久二区| 欧美新色视频| 国产精品扒开腿做爽爽爽视频| 亚洲国产黄色| 亚洲精品社区| 99一区二区| 亚洲国产综合在线看不卡| 欧美大片在线观看| 亚洲精品日韩在线| 亚洲一区二区三区视频播放| 久久精品欧洲| 欧美破处大片在线视频| 99国产麻豆精品| 亚洲欧美日本另类| 麻豆乱码国产一区二区三区| 亚洲黑丝在线| 欧美日韩精品综合| 狠狠狠色丁香婷婷综合激情| 亚洲精品一区在线观看香蕉| 久久成人综合视频| 亚洲激情亚洲| 久久成人精品| 樱桃国产成人精品视频| 国产精品草莓在线免费观看| 国内久久精品视频| 亚洲靠逼com| 91久久精品国产91久久| 欧美精品在线极品| 亚洲欧美www| 欧美一级片在线播放| 欧美黄色免费| 国产欧美精品国产国产专区| 欧美 亚欧 日韩视频在线| 欧美日韩国产高清视频| 原创国产精品91| 米奇777在线欧美播放| 亚洲直播在线一区| 亚洲激情成人在线| 亚洲欧美色婷婷| 亚洲国产婷婷香蕉久久久久久99 | 欧美激情亚洲视频| 国产九九视频一区二区三区| 久热re这里精品视频在线6| 免费在线国产精品| 国产无遮挡一区二区三区毛片日本| 亚洲欧美久久久久一区二区三区| 久久天堂av综合合色| 久久国产加勒比精品无码| 欧美日韩综合| 欧美xart系列高清| 欧美成人午夜77777| 亚洲第一视频| 美腿丝袜亚洲色图| 亚洲日本中文字幕免费在线不卡| 国产情人综合久久777777| 亚洲一区二区日本| 国内精品亚洲| 欧美与欧洲交xxxx免费观看| 一区二区不卡在线视频 午夜欧美不卡在 | 久久精品国产99精品国产亚洲性色 | 国产乱码精品一区二区三区av| 亚洲九九精品| 亚洲经典在线看| 欧美精品色网| 99国产精品视频免费观看| 久久这里只有| 亚洲一区美女视频在线观看免费| 久久精品国产在热久久 | 亚洲精品免费观看| 欧美福利视频一区| 香蕉久久一区二区不卡无毒影院| 美脚丝袜一区二区三区在线观看 | 欧美顶级少妇做爰| 午夜日韩在线| 亚洲区免费影片| 欧美黑人国产人伦爽爽爽| 亚洲高清在线| 欧美日韩在线播放一区二区| 欧美v亚洲v综合ⅴ国产v| 久久裸体艺术| 亚洲国产精品一区二区三区| 欧美二区在线播放| 亚洲伦理中文字幕| 亚洲激情电影中文字幕| 欧美天天影院| 久久精品人人做人人爽| 久久精品一区蜜桃臀影院| 欧美大片在线观看| 亚洲人体偷拍| 国产欧美一区二区精品性| 久久野战av| 亚洲黄色精品| 国产精品日韩一区| 欧美承认网站| 国产精品久久网站| 一区二区三区久久| 久久成人在线| 中文在线不卡视频| 日韩亚洲欧美一区二区三区| 亚洲一区二区精品| 亚洲高清在线观看| 久久久久国产精品一区| 很黄很黄激情成人| 日韩亚洲国产欧美| 极品少妇一区二区三区| 亚洲美女福利视频网站| 极品少妇一区二区三区精品视频| 一区二区三区蜜桃网| 激情av一区| 欧美伦理影院| 久热成人在线视频| 欧美日韩国产精品自在自线| 亚洲精品国精品久久99热| 欧美精品久久一区| 久久久久九九九九| 国产精品爱久久久久久久| 欧美高清视频一区| 欧美日韩四区| 久久久国产成人精品| 欧美在线视频a| 欧美午夜在线视频| 亚洲精品影视| 在线免费观看日本欧美| 亚洲精品国产精品国自产观看浪潮| 亚洲一区免费在线观看| 欧美国产日韩在线| 美女网站久久| 精品成人久久| 欧美在线你懂的| 国产一区二区三区高清播放| 欧美国产一区二区在线观看| 欧美成人免费播放| 一区在线视频观看| 欧美一区二区三区精品电影| 羞羞漫画18久久大片| 欧美日韩精品免费观看视一区二区| 欧美一区二区精品久久911| 新67194成人永久网站| 欧美区二区三区| 亚洲精品你懂的| 亚洲激情一区| 极品少妇一区二区三区| 亚洲国产日韩欧美在线动漫| 极品少妇一区二区三区精品视频| 午夜国产不卡在线观看视频| 中文在线不卡视频| 欧美乱妇高清无乱码| 亚洲高清123| 亚洲人成高清| 亚洲图片欧美日产| 久久精品国产清高在天天线| 亚洲精品久久久久中文字幕欢迎你 | 久久午夜色播影院免费高清| 国产精品视频自拍| 亚洲欧美bt| 国产精品分类| 欧美性猛交xxxx乱大交蜜桃| 亚洲五月六月| 久久一区二区三区四区| 精品91视频| 欧美www视频在线观看| 亚洲第一页在线| 一区二区三区国产| 欧美日韩一区不卡| 亚洲欧美国产精品va在线观看 | 在线精品视频一区二区三四| 久久久夜夜夜| 亚洲激情视频网| 欧美一区二区三区婷婷月色| 韩国一区二区三区美女美女秀| 久久综合给合久久狠狠色 | 在线观看国产精品淫| 久久夜色精品国产亚洲aⅴ| 亚洲激情不卡| 欧美在线免费观看| 激情视频一区二区| 欧美麻豆久久久久久中文| 欧美日本高清视频| 欧美在线观看一二区| 亚洲精品国产欧美| 欧美粗暴jizz性欧美20| 欧美在线一级va免费观看| 国产性色一区二区| 亚洲午夜视频在线观看| 麻豆av福利av久久av| 91久久久久久久久久久久久| 国产欧美一区二区精品秋霞影院 | 亚洲精品永久免费精品|