Substring Uva 11468_记忆化搜索 + AC自动机
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自动机的更多相关文章
- DP(记忆化搜索) + AC自动机 LA 4126 Password Suspects
题目传送门 题意:训练指南P250 分析:DFS记忆化搜索,范围或者说是图是已知的字串构成的自动机图,那么用 | (1 << i)表示包含第i个字串,如果长度为len,且st == (1 ...
- UVA 11468 Substring (记忆化搜索 + AC自动鸡)
传送门 题意: 给你K个模式串, 然后,再给你 n 个字符, 和它们出现的概率 p[ i ], 模式串肯定由给定的字符组成. 且所有字符,要么是数字,要么是大小写字母. 问你生成一个长度为L的串,不包 ...
- uva 707(记忆化搜索)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=21261 思路:此题需要记忆化搜索,dp[x][y][t]表示当前状 ...
- UVa 10118 记忆化搜索 Free Candies
假设在当前状态我们第i堆糖果分别取了cnt[i]个,那么篮子里以及口袋里糖果的个数都是可以确定下来的. 所以就可以使用记忆化搜索. #include <cstdio> #include & ...
- UVa 10400 记忆化搜索
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> us ...
- BZOJ-3208|记忆化搜索-花神的秒题计划Ⅰ
背景[backboard]: Memphis等一群蒟蒻出题中,花神凑过来秒题-- 描述[discribe]: 花花山峰峦起伏,峰顶常年被雪,Memphis打算帮花花山风景区的人员开发一个滑雪项目. 我 ...
- uva 10581 - Partitioning for fun and profit(记忆化搜索+数论)
题目链接:uva 10581 - Partitioning for fun and profit 题目大意:给定m,n,k,将m分解成n份,然后依照每份的个数排定字典序,而且划分时要求ai−1≤ai, ...
- UVA - 10118Free Candies(记忆化搜索)
题目:UVA - 10118Free Candies(记忆化搜索) 题目大意:给你四堆糖果,每一个糖果都有颜色.每次你都仅仅能拿随意一堆最上面的糖果,放到自己的篮子里.假设有两个糖果颜色同样的话,就行 ...
- UVA - 1631 Locker 记忆化搜索
题意:给定两个密码串,每次可以让1~3个相邻的密码向上或者向下滚动,每个密码是 ,问最少需要多少次滚动可以让原串成为目标串? 思路:假设当前要让第i位密码还原,我们可以同时转动,不同的转动方式会影响后 ...
随机推荐
- EditorLineEnds.ttr的困扰
DELL的n年的商用机电脑硬盘坏了,措手不及. 256ssd+1tb企业级.机器快乐很多.一小步,让机器快了一大步. 但是2007出问题了,每次启动EditorLineEnds.ttr被占用.原来有那 ...
- Spring Boot-整合redis(六)
redis安装 参考:https://www.cnblogs.com/LQBlog/p/9214517.html 单机版 1.添加pom依赖 <!-- Spring Boot Reids 依赖 ...
- iOS_25_彩票设置的cell的数据源模型的封装
组模型的封装 SettingGroup // // SettingGroup.h // 25_彩票 // // Created by beyond on 14-8-28. // Copyright ( ...
- UVA - 348Optimal Array Multiplication Sequence(递推)
id=19208">题目:Optimal Array Multiplication Sequence 题目大意:给出N个矩阵相乘.求这些矩阵相乘乘法次数最少的顺序. 解题思路:矩阵相乘 ...
- REST当道,NO MVC
前世今生 B/S开发经历了几个时代,如今已经是后MVC时期了. MVC体现了分层和解耦合的概念.从功能和理念上都做出过巨大贡献,使Java B/S开发在面对大型项目时从容不迫,说成是上个十年Java ...
- Intent 使用方法全面总结
调用拨号程序 // 给移动客服10086拨打电话 Uri uri = Uri.parse("tel:10086"); Intent intent = new Intent(Inte ...
- IOS算法(二)之选择排序
选择排序: 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后.直到所有待排序的数据元素排完. 选择排序是不稳定的排序方法. 一. 算法描写叙述 选择排序:比方在一 ...
- windows下mysql5.6.20使用mysqldumpslow.pl分析慢日志
要想执行mysqldumpslow.pl(这是perl程序),下载perl编译器. 下载地址:http://pan.baidu.com/s/1i3GLKAp 就是ActivePerl_5.16.2.3 ...
- js分享代码
<<!DOCTYPE html><html><head> <title></title></head> <body& ...
- ffmpeg实现
最近做一个小项目,要在线播放录制的 MP4 视频,想开源的 flash player 或 html 5 可以播放.可,虽然 MP4 是 H.264 编码,但就是播放不了.可能是封装方式(PS 方式)不 ...