Code:

#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int maxn=100;
const int maxd=400+3;
const int sigma=65;
double d[maxd][103],perc[sigma+3];
int ch[maxd][sigma+1],end1[maxd],f[maxd],last[maxd];
char A[30],mapp[sigma+3];
int cnt;
queue<int>Q;
int idx(char s){
if(s>='a'&&s<='z')return s-'a';
if(s>='A'&&s<='Z')return s-'A'+26;
return s-'0'+52;
}
struct V
{
void insert(char p[]){
int n=strlen(p);
int cur=0;
for(int i=0;i<n;++i){
int c=idx(p[i]);
if(!ch[cur][c])ch[cur][c]=++cnt;
cur=ch[cur][c];
}
end1[cur]=1,last[cur]=1;
}
void getfail(){
for(int i=0;i<sigma;++i)if(ch[0][i])Q.push(ch[0][i]);
while(!Q.empty()){
int r=Q.front();Q.pop();
for(int i=0;i<sigma;++i){
int u=ch[r][i];
if(!u){ch[r][i]=ch[f[r]][i];continue;}
Q.push(u);
int v=f[r];
while(v&&!ch[v][i])v=f[v];
f[u]=ch[v][i];
if(last[f[u]])last[u]=1;
}
}
}
double dp(int j,int L,int l,int n){
if(end1[j]||last[j])return 0.0;
if(L==l)return 1.0;
if(d[j][L]>=0)return d[j][L];
double ans=0.0;
for(int i=1;i<=n;++i){
int c=idx(mapp[i]);
ans+=perc[i]*dp(ch[j][c],L+1,l,n);
}
d[j][L]=ans;
return ans;
}
}AC;
int main(){
int T;scanf("%d",&T);
for(int cas=1;cas<=T;++cas)
{
memset(end1,0,sizeof(end1)); memset(d,-1,sizeof(d));
memset(f,0,sizeof(f)); memset(last,0,sizeof(last));
memset(ch,0,sizeof(ch));
cnt=0;
int k;scanf("%d",&k);
for(int i=1;i<=k;++i){scanf("%s",A);AC.insert(A);}
int n;scanf("%d",&n);char g=getchar();
for(int i=1;i<=n;++i)
{scanf("%c",&mapp[i]); scanf("%lf",&perc[i]);g=getchar();}
int l;scanf("%d",&l);
AC.getfail();
double ans=AC.dp(0,0,l,n);
printf("Case #%d: ",cas);
printf("%.6f\n",ans);
}
return 0;
}

  

Substring Uva 11468_记忆化搜索 + AC自动机的更多相关文章

  1. DP(记忆化搜索) + AC自动机 LA 4126 Password Suspects

    题目传送门 题意:训练指南P250 分析:DFS记忆化搜索,范围或者说是图是已知的字串构成的自动机图,那么用 | (1 << i)表示包含第i个字串,如果长度为len,且st == (1 ...

  2. UVA 11468 Substring (记忆化搜索 + AC自动鸡)

    传送门 题意: 给你K个模式串, 然后,再给你 n 个字符, 和它们出现的概率 p[ i ], 模式串肯定由给定的字符组成. 且所有字符,要么是数字,要么是大小写字母. 问你生成一个长度为L的串,不包 ...

  3. uva 707(记忆化搜索)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=21261 思路:此题需要记忆化搜索,dp[x][y][t]表示当前状 ...

  4. UVa 10118 记忆化搜索 Free Candies

    假设在当前状态我们第i堆糖果分别取了cnt[i]个,那么篮子里以及口袋里糖果的个数都是可以确定下来的. 所以就可以使用记忆化搜索. #include <cstdio> #include & ...

  5. UVa 10400 记忆化搜索

    #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> us ...

  6. BZOJ-3208|记忆化搜索-花神的秒题计划Ⅰ

    背景[backboard]: Memphis等一群蒟蒻出题中,花神凑过来秒题-- 描述[discribe]: 花花山峰峦起伏,峰顶常年被雪,Memphis打算帮花花山风景区的人员开发一个滑雪项目. 我 ...

  7. uva 10581 - Partitioning for fun and profit(记忆化搜索+数论)

    题目链接:uva 10581 - Partitioning for fun and profit 题目大意:给定m,n,k,将m分解成n份,然后依照每份的个数排定字典序,而且划分时要求ai−1≤ai, ...

  8. UVA - 10118Free Candies(记忆化搜索)

    题目:UVA - 10118Free Candies(记忆化搜索) 题目大意:给你四堆糖果,每一个糖果都有颜色.每次你都仅仅能拿随意一堆最上面的糖果,放到自己的篮子里.假设有两个糖果颜色同样的话,就行 ...

  9. UVA - 1631 Locker 记忆化搜索

    题意:给定两个密码串,每次可以让1~3个相邻的密码向上或者向下滚动,每个密码是 ,问最少需要多少次滚动可以让原串成为目标串? 思路:假设当前要让第i位密码还原,我们可以同时转动,不同的转动方式会影响后 ...

随机推荐

  1. 8.在idea中配置maven

    1.在IntelliJ IDEA中配置maven 打开-File-Settings 2.我们还可以在勾选一些其他选项 3.我们可以更新一下本地仓库和远程仓库,这个样在pom.xml文件中添加依赖jia ...

  2. SpringBoot中logback.xml使用application.yml中属性

    教你如何使用 springProfile 与 springProperty 让你的logback.xml 配置显得更有逼格,当别人还在苦苦挣扎弄logback-{profile}.xml的时候 你一个 ...

  3. CGLib与JDK的动态代理

    一.CGLib 简单介绍 CGLib (Code Generation Library) 是一个强大的,高性能,高质量的Code生成类库. 它能够在执行期扩展Java类与实现Java接口. Hiber ...

  4. 一见钟情Sublime

    打开 preferences -> Setting-User,加入下面代码 { "font_size": 14, "ignored_packages": ...

  5. Linux控制台版本号2048

    在Github上看到一个荷兰人写的linux控制台版的2048,用的C语言.感觉非常有意思. 原网址在这里. 读了一下他的源代码,感觉写的不错.就厚着脸皮加了一些中文凝视,源代码例如以下: /* == ...

  6. 一个使用命令行编译Android项目的工具类

    一个使用命令行编译Android项目的工具类 简单介绍 编译apk项目须要使用的几个工具,基本都在sdk中,它们各自是(Windows系统): 1.aapt.exe 资源打包工具 2.android. ...

  7. 项目PMO工作

     算起来.这是第一次以项目PMO人员的身份參与项目,尽管非常可惜没有从头參与,也没有參与到项目结束,仅仅有短短的两个月.但对项目PMO也可略窥一斑.如今就当个流水账写一写吧. 进项目组的时候,是中 ...

  8. RDLC报表钻取空白页问题

    在改动报表查询条件时,钻取页突然空白了,百思不得其解,之前好好的,研究了一个下午和一个晚上.查资料等等,网上非常多资料都是设置报表的 ConsumeConteinerWhitespace = True ...

  9. bzoj2260: 商店购物&&4349: 最小树形图

    最小树形图问题啊 最小树形图是撒哩,就是给你一个有向图,确定一个根,要你到达所有点,那棵最短路径树的总边权 做这个用的是朱(jv)刘(lao)算法. 首先假如有多个联通块就无解啦 对应每个点(除了根) ...

  10. tflearn Training Step每次 We will run it for 10 epochs (the network will see all data 10 times) with a batch size of 16. n_epoch=10, batch_size=16

    Training TFLearn provides a model wrapper 'DNN' that can automatically performs a neural network cla ...