博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 11468 Substring (AC自动机)
阅读量:5837 次
发布时间:2019-06-18

本文共 2213 字,大约阅读时间需要 7 分钟。

用把失配边也加到正常边以后AC自动机,状态是长度递减的DAG,每次选一个不会匹配字符的转移。

dp[u][L]表示当前在tire树上u结点长度还剩L时候不匹配的概率,根据全概率公式跑记忆化搜索。

#include
using namespace std;typedef double ld;const int maxnds = 21*21, sigma_size = 62;int nds;int ch[maxnds][sigma_size];double p[sigma_size];int f[maxnds];int id[256];bool val[maxnds];int N;void getF(){ queue
q; f[0] = 0; for(int c = 0; c < sigma_size; c++){ int u = ch[0][c]; if(u) { q.push(u); f[u] = 0; } } while(q.size()){ int r = q.front(); q.pop(); for(int c = 0; c < sigma_size; c++){ int u = ch[r][c]; if(!u) { ch[r][c] = ch[f[r]][c]; continue; } q.push(u); int v = f[r]; while(v && !ch[v][c]) v = f[v]; f[u] = ch[v][c]; val[u] |= val[f[u]]; } }}void add(char *s){ int n = strlen(s), u = 0; for(int i = 0; i < n; i++){ int c = id[s[i]]; if(!ch[u][c]){ memset(ch[nds],0,sizeof(ch[nds])); val[nds] = false; ch[u][c] = nds++; } u = ch[u][c]; } val[u] = true;}const int maxL = 101;ld dp[maxnds][maxL];bool vis[maxnds][maxL];bool exist[sigma_size];ld dfs(int u,int L){ if(!L) return 1; if(vis[u][L]) return dp[u][L]; vis[u][L] = true; ld &ret = dp[u][L]; ret = 0; for(int i = 0; i < sigma_size; i++)if(exist[i]){ if(!val[ch[u][i]]) ret += p[i]*dfs(ch[u][i],L-1); } return ret;}int id_cnt;void init(){ memset(ch[0],0,sizeof(ch[0])); nds = 1; val[0] = false; memset(exist,0,sizeof(exist));}#define cerid ,cout<
<
>T; int kas = 0; while(T--){ init(); int K; scanf("%d",&K); for(int i = 0; i < K; i++){ scanf("%s",temp); add(temp); } scanf("%d",&N); for(int i = 0; i < N; i++){ scanf("%s",temp); scanf("%lf",p+id[*temp]); exist[id[*temp]] = true; } getF(); int L; scanf("%d",&L); memset(vis,0,sizeof(vis)); printf("Case #%d: %lf\n",++kas,dfs(0,L)); } return 0;}

 

转载于:https://www.cnblogs.com/jerryRey/p/4798408.html

你可能感兴趣的文章
32、SpringBoot-整合Dubbo
查看>>
python面向对象基础
查看>>
HDU 2044 一只小蜜蜂(递归)
查看>>
docker 下 安装rancher 笔记
查看>>
spring两大核心对象IOC和AOP(新手理解)
查看>>
数据分析相关
查看>>
Python LDAP中的时间戳转换为Linux下时间
查看>>
微信小程序蓝牙连接小票打印机
查看>>
C++_了解虚函数的概念
查看>>
全新jmeter视频已经上架
查看>>
Windows 8下如何删除无线配置文件
查看>>
oracle系列(五)高级DBA必知的Oracle的备份与恢复(全录收集)
查看>>
hp 服务器通过串口重定向功能的使用
查看>>
国外10大IT网站和博客网站
查看>>
android第十一期 - SmoothSwitchLibrary仿IOS切换Activity动画效果
查看>>
zabbix 批量web url监控
查看>>
MongoDB CookBook读书笔记之导入导出
查看>>
shell如何快速锁定所有账号
查看>>
HTML 5实现的手机摇一摇
查看>>
此博客不再发表对自己私事的看法
查看>>