ac_automation 模板
来源:互联网 发布:淘宝怎么更改退款金额 编辑:程序博客网 时间:2024/05/29 07:50
ac_automation 模板
I do remember your birthday
birthday
remember
timeless
PS:2017.6.10更改模板
#include<cmath>#include<ctime>#include<cstdio>#include<cstdlib>#include<cstring>#include<complex>#include<iostream>#include<algorithm>#include<iomanip>#include<vector>#include<string>#include<queue>#include<set>#include<map>using namespace std;inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch<='9'&&ch>='0'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();} return x*f;}const int N=1000100;int n,top=0,sz=1,tr[N][26],fail[N],q[N],f[N],danger[N];char s[N],aim[N],a[N];bool mark[N];void insert() { int len=strlen(a);int now=1,k; for(int i=0;i<len;i++) {k=a[i]-'a';if(!tr[now][k])tr[now][k]=++sz;now=tr[now][k];} danger[now]++; } void ac_automation() { int head=0,tail=1,k,now;q[0]=1; while(head<tail) { now=q[head++]; for(int i=0;i<26;i++) { if(tr[now][i]) { k=fail[now];//while(!tr[k][i])k=fail[k]; fail[tr[now][i]]=tr[k][i]; q[tail++]=tr[now][i]; } else {tr[now][i]=tr[fail[now]][i];} } } }void solve(){n=strlen(aim);int k,now=1,ans=0;f[0]=1;for(int i=0;i<n;i++){mark[now]=1;k=aim[i]-'a'; now=tr[now][k]; if(!mark[now])for(int j=now;j;j=fail[j]) {ans+=danger[j];danger[j]=0;}}printf("%d\n",ans);}int main(){scanf("%s",aim);for(int i=0;i<26;i++)tr[0][i]=1;fail[1]=0;n=read();while(n--)scanf("%s",a),insert();ac_automation();solve();return 0;}/*idorememberyourbirthday 3 birthday remember timeless 2*/
#include<cmath>#include<ctime>#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>#include<iomanip>#include<vector>#include<string>#include<queue>#include<set>#include<map>using namespace std;inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch<='9'&&ch>='0'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}return x*f;}const int N=1000100;int n,m,tr[N][26],fail[N],q[N],danger[N],sz=1,ans;bool mark[N];char s[N],cm[N];void insert(){int len=strlen(s+1);int now=1,k;for(int i=1;i<=len;i++){k=s[i]-'a';if(!tr[now][k])tr[now][k]=++sz;now=tr[now][k];}danger[now]++;} void ac_automation(){int head=0,tail=1,k,now;q[0]=1;fail[1]=0;while(head<tail){now=q[head++];for(int i=0;i<26;i++)if(tr[now][i]){k=fail[now];while(!tr[k][i])k=fail[k];fail[tr[now][i]]=tr[k][i];q[tail++]=tr[now][i];}}}void solve(){int k,t=1,n=strlen(cm+1);for(int i=1;i<=n;i++){mark[t]=1;k=cm[i]-'a';while(!tr[t][k])t=fail[t];t=tr[t][k]; if(!mark[t])for(int j=t;j;j=fail[j]){ans+=danger[j];danger[j]=0;}}printf("%d\n",ans);}int main(){scanf("%s",cm+1);n=read();for(int i=0;i<26;i++)tr[0][i]=1;while(n--){scanf("%s",s+1);insert();}ac_automation();solve();return 0;} /*idorememberyourbirthday3birthdayremembertimeless*/
0 0
- ac_automation 模板
- HDU 2222 AC_Automation 第一道AC自动机
- 模板
- 模板?
- 模板
- 模板
- 模板
- 模板
- 模板
- 模板
- 模板
- 模板
- 模板
- 模板
- 模板
- 模板
- 模板
- 模板
- Android 保存和恢复activity的状态数据
- Unity中内嵌网页插件UniWebView使用总结
- 排序算法(5)--快速排序
- 椭圆与圆的拟合
- 内核自带LED驱动移植
- ac_automation 模板
- numpy库
- Linux下将文件打包、压缩并分割成指定大小
- 【信贷业务】信贷五级分类的定义
- eclipse中格式化代码快捷键Ctrl+Shift+F失效的解决办法
- Linux free -m 详细说明
- Minimum Moves to Equal Array Elements问题及解法
- yum更新源
- POJ-3757: Simple Distributed storage system【简单01分数规划(二分)】