ZSTU 3719 AC自动机DP
2012-04-04 15:23
246 查看
先mark,题目刷的差不多再说
View Code
View Code
#include<cstdio> #include<cstring> #define FF(i,to) for(i=0;i<to;i++) const int MM = 1000005,NC = 26; int N; char str[1000005]; struct trie{ int ch[NC],fail,f,val; void init(){ memset(ch,0,sizeof(ch)); fail=f=val=0; } }a[MM]; int cnt,rt,q[MM],front,last; void Init(){ cnt=1;rt=cnt++; a[0].init();int i; FF(i,NC) a[0].ch[i]=rt; a[1].init(); } void Ins(char *in){ int now=rt; for(;*in;++in){ int id=*in-'a'; if(!a[now].ch[id]){ a[cnt].init(); a[now].ch[id]=cnt++; } now=a[now].ch[id]; } a[now].f=1; } #define max(a,b) ((a)>(b)?(a):(b)) void build(int &ans){ front=last=0; q[front++]=rt; int i; while(last<front){ int t=q[last++]; FF(i,NC){ int tt=a[t].ch[i]; int ff=a[t].fail; if(tt){ a[tt].fail=a[ff].ch[i]; a[tt].val=max(a[t].val,a[a[ff].ch[i]].val)+a[tt].f; q[front++]=tt; } else a[t].ch[i]=a[ff].ch[i]; } } FF(i,cnt) ans=max(ans,a[i].val); } int main(){ int n,i; while(scanf("%d",&n),n){ Init(); FF(i,n){ scanf("%s",str); Ins(str); } int ans=0; build(ans); printf("%d\n",ans); } return 0; }
相关文章推荐
- HDU 2825(Wireless Password-AC自动机+状压dp)
- zoj 3494 BCD Code(AC自动机+数位dp)
- Codeforces Gym 101174 E. Passwords (AC 自动机 + DP)
- hdu 2825(ac自动机+状态压缩dp)
- 【bzoj 1030】文本生成器(AC自动机+DP)
- nefu 1267 挑战字符串(AC自动机+dp)
- zoj 1540 Censored! AC自动机+DP 长度为len的字符串不包含病毒串的个数
- UVA-11468 Substring(AC自动机+DP)
- HDU 2296 Ring(AC自动机+DP)
- HDOJ-2296 AC自动机+DP..一定要细心..
- ZeroJudge-b179 空罐 Cans 可爱的AC自动机DP..
- poj 2778 AC自动机DP
- HDU 4534 郑厂长系列故事——新闻净化(AC自动机+DP)
- UVALive 4126 Password Suspects(AC自动机+dp)
- ZOJ 3545 Rescue the Rabbit(AC自动机+状压DP)(The 2011 ACM-ICPC Asia Dalian Regional Contest)
- hdu 2825(ac自动机+状态压缩dp)
- POJ 1625 Censored!(AC自动机+DP)
- hdu 3341Lost's revenge(ac自动机+dp)
- Rikka with String HDU - 6086 多校#5 AC自动机DP
- HDU 2825 Wireless Password(AC自动机+状压DP)