#include<cstdio>
#include<cstring>
#include<queue>
#include<cstdio>
#include<map>
#include<string>
using namespace std; const int SIGMA_SIZE = ;
const int MAXNODE = ; // 结点总数
const int MAXS = + ; // 模板个数 int idx[], n;
double prob[SIGMA_SIZE]; struct AhoCorasickAutomata
{
int ch[MAXNODE][SIGMA_SIZE];
int f[MAXNODE]; // fail函数
int match[MAXNODE]; // 是否包含某一个字符串
int sz; // 结点总数 void init()
{
sz = ;
memset(ch[], , sizeof(ch[]));
} // 插入字符串
void insert(char *s)
{
int u = , n = strlen(s);
for(int i = ; i < n; i++)
{
int c = idx[s[i]];
if(!ch[u][c]) {
memset(ch[sz], , sizeof(ch[sz]));
match[sz] = ;
ch[u][c] = sz++;
}
u = ch[u][c];
}
match[u] = ;
} // 计算fail函数
void getFail()
{
queue<int> q;
f[] = ;
// 初始化队列
for(int c = ; c < SIGMA_SIZE; c++)
{
int u = ch[][c];
if(u) { f[u] = ; q.push(u); }
}
// 按BFS顺序计算fail
while(!q.empty())
{
int r = q.front(); q.pop();
for(int c = ; 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];
match[u] |= match[f[u]];
}
}
}
}; AhoCorasickAutomata ac; double d[MAXNODE][];
int vis[MAXNODE][]; double getProb(int u, int L)
{
if(!L) return 1.0;
if(vis[u][L]) return d[u][L];
vis[u][L] = ;
double &ans = d[u][L];
ans = 0.0;
for(int i = ; i < n; i++)
if(!ac.match[ac.ch[u][i]]) ans += prob[i] * getProb(ac.ch[u][i], L-);
return ans;
} char s[][]; int main()
{
int T,i,k,L,kase;
scanf("%d", &T);
for(kase = ; kase <= T; kase++)
{
scanf("%d", &k);
for(i = ; i < k; i++) scanf("%s", s[i]);
scanf("%d", &n);
for(i = ; i < n; i++)
{
char ch[];
scanf("%s%lf", ch, &prob[i]);
idx[ch[]] = i;
}
ac.init();
for(i = ; i < k; i++) ac.insert(s[i]);
ac.getFail();
scanf("%d", &L);
memset(vis, , sizeof(vis));
printf("Case #%d: %.6lf\n", kase, getProb(, L));
}
return ;
}

最新文章

  1. Winform的&quot;透明&quot;
  2. Lisk沙箱漏洞分析及解决方案
  3. MVC NPOI Linq导出Excel通用类
  4. 第2章 面向对象的设计原则(SOLID):5_迪米特法则
  5. hdu----(2586)How far away ?(DFS/LCA/RMQ)
  6. FastDFS之java客户端使用
  7. WIN7局域网文件共享设置方法
  8. IE 11 无法访问某些不兼容性视图的解决方法
  9. MVC 插件式开发
  10. zipkin
  11. mathjs,math.js解决js运算精度问题
  12. MATLAB GUI设计(线性卷积和循环卷积的比较--笔记)
  13. RestTemplete
  14. JS算法练习二
  15. 如何将PDF文件转Word,有什么方法
  16. 【gridview增删改查】数据库查询后lodop打印
  17. JavaScript笔记 #06# Promise简单例子
  18. JavaScript -- FileSystemObject-文件夹
  19. cmd中mysql中文乱码问题
  20. unity WWW加载进度条

热门文章

  1. js判断是否为app
  2. SC || 解决在git中上传过大文件的问题(如何将提交过的彻底删除
  3. jvm | 基于栈的解释器执行过程
  4. 《剑指offer》39题—数组中出现次数超过一半的数字
  5. HTML DOM Frame 的 src
  6. 字符串 -----JavaScript
  7. iOS下的2D仿射变换机制(CGAffineTransform相关)
  8. vue 前端判断输入框不能输入0 空格。特殊符号。
  9. vc文件操作汇总—支持wince
  10. Some tricks