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. 【微软2017年预科生计划在线编程笔试第二场 B】Diligent Robots

    [题目链接]:http://hihocoder.com/problemset/problem/1498 [题意] 一开始你有1个机器人; 你有n个工作; 每个工作都需要一个机器人花1小时完成; 然后每 ...

  2. 洛谷 P1494 BZOJ 2038 [2009国家集训队]小Z的袜子(hose)

    //洛谷题面字体.排版我向来喜欢,却还没收录这道如此有名的题,BZOJ的题面字体太那啥啦,清橙的题面有了缩进,小标题却和正文字体一致,找个好看的题面咋这么难呐………… //2019年3月23日23:0 ...

  3. [bzoj2588][Spoj10628]Count on a tree_主席树

    Count on a tree bzoj-2588 Spoj-10628 题目大意:给定一棵n个点的树,m次查询.查询路径上k小值. 注释:$1\le n,m\le 10^5$. 想法:好像更博顺序有 ...

  4. [bzoj1606][Usaco2008 Dec]Hay For Sale 购买干草_动态规划_背包dp

    Hay For Sale 购买干草 bzoj-1606 Usaco-2008 Dec 题目大意:约翰遭受了重大的损失:蟑螂吃掉了他所有的干草,留下一群饥饿的牛.他乘着容量为C(1≤C≤50000)个单 ...

  5. HTML【2】表单提交与服务层的模拟(具体解释get与post提交方式的不同)

    在HTML[1]中已经说明了HTML编程的基本方式,最后说到了表单提交的方式有get和post方式.那么究竟什么是get/post 方式呢,两者有什么差别?如今我就详细的介绍一下. 首先回想一下表单的 ...

  6. SPOJ 10628 Count on a tree (lca+主席树)

    题意:给定一棵有n个结点的树,每一个点有一个权值.共同拥有m个询问.对于每一个询问(u,v,k),回答结点u至v之间第k小的点的权值. 思路:主席树+lca.首先指定一个根结点dfs一次并在此过程中建 ...

  7. Linux系统下怎样配置SSH?怎样开启SSH?

    SSH作为Linux远程连接重要的方式,怎样配置安装linux系统的SSH服务.怎样开启SSH?以下来看看吧(本例为centos系统演示怎样开启SSH服务) 1.登陆linux系统,打开终端命令.输入 ...

  8. 【转】selenium自动化测试环境搭建

    转:http://blog.csdn.net/mao1059568684/article/details/17347853 第一步 安装JDK JDk1.7. 下载地址:http://www.orac ...

  9. Java读源代码学设计模式:适配器Adapter

    适配器模式相关源代码:slf4j-1.6.1.hibernate-3.6.7 大家都知道.log4j是一个广泛使用的日志工具,除此之外.sun公司在JDK中也有自己的日志工具,也就是java.util ...

  10. bzoj5194: [Usaco2018 Feb]Snow Boots

    还真是.. 就是 一个被不点名批评的垃圾骗分暴力选手被普及难度的省选信心(??)模拟赛艹爆的题解 的t3嘛... #include<cstdio> #include<iostream ...