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

hdu2825

Wireless Password

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2163    Accepted Submission(s): 596


Problem Description
Liyuan lives in a old apartment. One day, he suddenly found that there was a wireless network in the building. Liyuan did not know the password of the network, but he got some important information from his neighbor. He knew the password consists only of lowercase letters 'a'-'z', and he knew the length of the password. Furthermore, he got a magic word set, and his neighbor told him that the password included at least k words of the magic word set (the k words in the password possibly overlapping).

For instance, say that you know that the password is 3 characters long, and the magic word set includes 'she' and 'he'. Then the possible password is only 'she'.

Liyuan wants to know whether the information is enough to reduce the number of possible passwords. To answer this, please help him write a program that determines the number of possible passwords.
 

Input
There will be several data sets. Each data set will begin with a line with three integers n m k. n is the length of the password (1<=n<=25), m is the number of the words in the magic word set(0<=m<=10), and the number k denotes that the password included at least k words of the magic set. This is followed by m lines, each containing a word of the magic set, each word consists of between 1 and 10 lowercase letters 'a'-'z'. End of input will be marked by a line with n=0 m=0 k=0, which should not be processed.
 

Output
For each test case, please output the number of possible passwords MOD 20090717.
 

Sample Input
10 2 2 hello world 4 1 1 icpc 10 0 0 0 0 0
 

Sample Output
2 1 14195065
 

Source
2009 Multi-University Training Contest 1 - Host by TJU
 

Recommend
gaojie


鴨梨巨大啊
6個小時
囧呆了

code
#include <cstdio>
#include 
<cstdlib>
#include 
<cstring>
#include 
<cmath>
#include 
<ctime>
#include 
<cassert>
#include 
<iostream>
#include 
<sstream>
#include 
<fstream>
#include 
<map>
#include 
<set>
#include 
<vector>
#include 
<queue>
#include 
<algorithm>
#include 
<iomanip>
using namespace std;
#define maxn 205
#define mod 20090717
struct node
{
    
int next[26];
    
int fail,count;
    
void init()
    {
        memset(next,
-1,sizeof(next));
        count
=0;
        fail
=-1;
    }
} s[
1000000];
int sind;
int head,tail,q[1000000];
int f[30][200][1225];
int n,m,k,kk;
int fff[1225];
void init1()
{
    fff[
0]=0;
    
for(int i=1; i<(1<<10); i++) fff[i]=fff[i>>1]+(i&1);
}
void cas_init()
{
    s[
0].init();
    sind
=1;
}
void ins(char str[],int off)
{
    
int len,i,j,ind;
    ind
=0;
    len
=strlen(str);
    
for(i=0; i<len; i++)
    {
        j
=str[i]-'a';
        
if(s[ind].next[j]==-1)
        {
            s[sind].init();
            s[ind].next[j]
=sind++;
        }
        ind
=s[ind].next[j];
    }
    s[ind].count
= s[ind].count|(1<<off);
}
void make_fail()
{
    
int p,i,son,u;
    head
=0;
    tail
=1;
    q[tail]
=0;
    
while(head<tail)
    {
        u
=q[++head];
        
for(i=0; i<26; i++)
        {
            
if(s[u].next[i]!=-1)
            {
                p
=s[u].fail;
                son
=s[u].next[i];
                
while(p!=-1&&s[p].next[i]==-1) p=s[p].fail;
                
if(u==0) s[son].fail=0;
                
else s[son].fail=s[p].next[i];
                s[son].count
=s[son].count| s[s[son].fail].count;
                q[
++tail]=son;
            }
            
else
            {
                p
=s[u].fail;
                
while(p!=-1&&s[p].next[i]==-1) p=s[p].fail;
                
if(u==0) s[u].next[i]=0;
                
else s[u].next[i]=s[p].next[i];
            }

        }
    }
}
void solve()
{
    
int i,j,tk,l,son;
    kk
=1<<m;
    
for(i=0; i<=n; i++)
        
for(j=0; j<=sind; j++)
            
for(tk=0; tk<=kk; tk++)
                f[i][j][tk]
=0;
    f[
0][0][0]=1;

    
for(i=0; i<n; i++)
    {
        
for(j=0; j<sind; j++)
        {
            
for(tk=0; tk<kk; tk++)
            {
                
if(f[i][j][tk]==0continue;
                
for(l=0; l<26; l++)
                {
                    son
=s[j].next[l];
                    f[i
+1][son][tk|s[son].count]=f[i+1][son][tk|s[son].count]+f[i][j][tk];
                    f[i
+1][son][tk|s[son].count]=f[i+1][son][tk|s[son].count]%mod;
                }
            }
        }
    }
    
int ans;
    ans
=0;
    
for(i=0; i<sind; i++)
        
for(j=0; j<kk; j++)
            
if(fff[j]>=k)
            {
                ans
=ans+f[n][i][j];
                ans
=ans%mod;
            }
    printf(
"%d\n",ans);
}
int main()
{
    
char str[105];
    init1();
    
while(scanf("%d%d%d",&n,&m,&k)!=EOF)
    {
        
if(n==0&&m==0&&k==0break;
        cas_init();
        
for(int i=0; i<m; i++)
        {
            scanf(
"%s",str);
            ins(str,i);
        }
        make_fail();
        solve();
    }
    
return 0;
}

posted on 2012-08-03 21:42 jh818012 閱讀(170) 評論(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>
            久久久噜噜噜久噜久久| 国产女优一区| 国产精品国产三级国产aⅴ入口| 国产农村妇女毛片精品久久麻豆| 亚洲人成绝费网站色www| 欧美一区午夜精品| 亚洲精品乱码久久久久久日本蜜臀 | 亚洲国产婷婷香蕉久久久久久99 | 亚洲欧美电影在线观看| 亚洲高清久久久| 久久成人久久爱| 国产精品a久久久久| 亚洲精品久久久久久久久久久| 欧美中文字幕不卡| 一区二区三区精品| 欧美人与禽猛交乱配视频| 亚洲国产国产亚洲一二三| 久久国产加勒比精品无码| 一区二区免费在线观看| 欧美金8天国| 亚洲欧洲一区二区三区在线观看 | 亚洲一区高清| 欧美一区二区高清| 欧美亚洲网站| 亚洲成人直播| 久久国产综合精品| 国产精品盗摄一区二区三区| 亚洲三级免费| 欧美福利一区二区| 久久久不卡网国产精品一区| 国产日韩在线看| 欧美亚洲综合在线| 一区二区三区高清| 欧美日韩美女在线| 99re视频这里只有精品| 亚洲电影观看| 久色成人在线| 1000部国产精品成人观看| 久久综合狠狠综合久久综青草| 午夜一区二区三区在线观看| 国产精品亚洲片夜色在线| 亚洲欧美日韩在线不卡| 亚洲性xxxx| 国产精品揄拍500视频| 欧美淫片网站| 欧美一级电影久久| 国产在线观看一区| 久久综合色天天久久综合图片| 久久精品国产亚洲5555| 红桃视频国产精品| 欧美 日韩 国产一区二区在线视频| 久久久久久久久久看片| 在线欧美日韩国产| 欧美大片一区二区| 欧美成人中文| 一区二区三区你懂的| 一区二区国产日产| 国产精品视频网站| 久久久亚洲综合| 久久久久国内| 亚洲国产欧美久久| 亚洲国产一区二区视频| 欧美美女喷水视频| 亚洲一区在线看| 亚洲女同在线| 悠悠资源网久久精品| 欧美国产一区二区| 欧美日本一道本在线视频| 亚洲制服少妇| 欧美在线综合| 亚洲精品无人区| 一本久久a久久精品亚洲| 国产精品影片在线观看| 久久久亚洲精品一区二区三区 | 久久野战av| 免费观看一区| 亚洲午夜精品视频| 午夜亚洲激情| 亚洲精品久久7777| 中日韩美女免费视频网站在线观看| 99热这里只有成人精品国产| 欧美日韩在线不卡| 久久精品国产99国产精品澳门| 久久综合导航| 亚洲午夜电影| 欧美在线视频免费播放| 91久久夜色精品国产九色| 99在线|亚洲一区二区| 国产亚洲欧美激情| 亚洲国产精品999| 国产精品一区二区a| 欧美第一黄色网| 国产精品久久久久高潮| 麻豆精品精华液| 欧美日韩一区国产| 久久综合电影一区| 欧美日韩影院| 久久理论片午夜琪琪电影网| 欧美大色视频| 久久激情视频| 欧美日韩国产高清| 久久人人爽人人| 欧美三级不卡| 嫩草影视亚洲| 国产精品羞羞答答xxdd| 亚洲国产精品成人久久综合一区| 国产精品久久久久久久一区探花 | 亚洲欧美偷拍卡通变态| 看欧美日韩国产| 亚洲欧美美女| 免费在线看成人av| 欧美一区二区三区另类| 欧美高清在线播放| 久久久久免费观看| 欧美日韩综合不卡| 欧美不卡视频一区发布| 国产精品三级视频| 91久久精品国产91性色| 国产一区二区三区成人欧美日韩在线观看 | 免费不卡在线观看av| 国产精品超碰97尤物18| 欧美韩日高清| 国产亚洲精品一区二区| 日韩一二在线观看| 亚洲高清网站| 欧美一区二区黄| 亚洲男人的天堂在线观看| 美女精品视频一区| 久久久99国产精品免费| 欧美色欧美亚洲另类二区| 欧美国产日韩一区| 国内综合精品午夜久久资源| 亚洲深夜激情| 一本色道久久99精品综合| 老牛影视一区二区三区| 久久久久99| 国产精品性做久久久久久| 99re66热这里只有精品4| 亚洲国产精品va在线看黑人动漫| 亚洲欧美在线看| 亚洲字幕一区二区| 欧美日韩精品一区二区在线播放| 欧美成人精品在线观看| 国产在线不卡精品| 午夜久久影院| 欧美亚洲一区二区在线观看| 国产精品成人在线| 99re热精品| 一区二区欧美在线| 欧美电影在线播放| 免费日韩视频| 亚洲国产日韩一级| 韩日欧美一区| 午夜精品久久久久久99热软件| 亚洲性图久久| 欧美日韩你懂的| 亚洲精品国产视频| 亚洲精品国久久99热| 久久视频这里只有精品| 久久免费视频网| 国产一区日韩一区| 亚洲欧美日本日韩| 午夜精品美女久久久久av福利| 欧美视频一区在线观看| 日韩视频精品在线观看| 99国产精品国产精品久久| 美女免费视频一区| 欧美激情成人在线视频| 亚洲激情电影在线| 欧美成人精品| 亚洲黄色成人网| 亚洲精品乱码久久久久| 欧美成人免费在线观看| 亚洲第一精品夜夜躁人人躁| 亚洲激情av| 欧美韩国在线| 日韩网站在线观看| 亚洲主播在线观看| 国产精品入口日韩视频大尺度| 亚洲欧美日韩国产一区二区| 欧美在线一区二区| 韩国一区电影| 久久婷婷国产麻豆91天堂| 欧美mv日韩mv亚洲| 亚洲精品在线免费观看视频| 欧美伦理91i| 亚洲天堂av在线免费| 午夜一区在线| 国产一区导航| 久久理论片午夜琪琪电影网| 欧美成人黄色小视频| 亚洲精品美女| 欧美体内she精视频| 亚洲免费网站| 久久综合狠狠| 一本色道久久88综合日韩精品| 国产精品国色综合久久| 午夜日韩在线| 欧美成人午夜免费视在线看片| 日韩视频在线观看|