#include

多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > LA3942 Remember the Word(Trie+DP)

LA3942 Remember the Word(Trie+DP)

來源:程序員人生   發布時間:2014-10-11 08:00:01 閱讀次數:2886次

Trie圖的簡單應用。這題關鍵是想出遞推式。令d(i)表示從字符i開始的字符串,d(i)=sum{d(i+len(x))},x是s[i...L]的前綴。然后把所有可分解成的單詞構造成一顆Trie樹,再讓母串在上面跑,d[0]即是方案總數。

#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define mod 20071027 #define M 400005 using namespace std; int n,top,len; int tree[M][27]; char S[M]; char p[105]; int val[M]; int d[M]; void init() { top=1; memset(tree,0,sizeof(tree)); memset(d,0,sizeof(d)); } int idx(char c) { return c-'a'; } void insert(char *s) { int Len=strlen(s); int u=0; for(int i=0;i<Len;i++) { int c=idx(s[i]); if(!tree[u][c]) { val[top]=0; tree[u][c]=top++; } u=tree[u][c]; } val[u]=1; } int query(char *s,int start) { int count=0; int u=0; for(int i=start;i<len;i++) { int c=idx(s[i]); u=tree[u][c]; if(!u) return count; if(val[u]) { count+=d[i+1]; count%=mod; } } return count; } int main() { int t=1; //freopen("d: est.txt","r",stdin); while(scanf("%s",S)!=EOF) { scanf("%d",&n); init(); for(int i=0;i<n;i++) { scanf("%s",p); insert(p); } len=strlen(S); d[len]=1; for(int i=1;i<=len;i++) { d[len-i]=query(S,len-i); } cout<<"Case "<<t++<<": "<<d[0]<<endl; } return 0; }


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 午夜国产精品久久影院 | 精品一精品国产一级毛片 | 国内精品免费一区二区三区 | 亚洲国产高清视频在线观看 | 欧美午夜免费一级毛片 | 久草香蕉视频 | 精品亚洲成a人在线观看 | 欧美另类精品一区二区三区 | 国产综合久久久久 | 亚洲第九十七页 | 日韩欧美二区 | 自拍偷拍视频网站 | 国产69精品久久久久99 | 精品一区二区乱码久久乱码 | 亚洲国产成人精彩精品 | 就去干成人 | 他添的我好湿好爽视频 | 欧美极品尤物在线播放一级 | 国产成人亚洲精品91专区手机 | 最近高清中文字幕大全免费1 | 天天看毛片 | 欧美人与z0z0xxxx | 天天拍久久 | 久久er国产精品免费观看8 | 久久久全国免费视频 | 欧美另类z0z000高清 | 五月婷婷丁香综合 | 久久久久久久久久久观看 | 亚洲第一视频 | 欧美日韩一区二区视频免费看 | 免费看的黄色网址 | 午夜性a一级毛片 | 欧美18毛片免费看 | 午夜视频播放 | h在线观看免费 | 精品久久久久久久一区二区伦理 | 亚洲国产精品视频 | 国产1区2区3区在线观看 | 国产成人做受免费视频 | 久久综合九色综合欧洲 | 国内交换一区二区三区 |