沉迷AC自动机无法自拔之:[UVA 11468] Substring
图片加载可能有点慢,请跳过题面先看题解,谢谢



这个鬼题目,上一波套路好了
先用题目给的模板串建\(AC\)自动机,把单词结尾标记为 \(val=1\),然后在建好的\(AC\)自动机上跑 \(dp\),
设 \(f[x][L]\) 为:当前在 \(x\) 节点,剩下还要走 \(L\) 步并且不经过单词结尾的概率
那么有转移: \(f[x][L]=\sum_{!val[son[x][i]]}p[i]*dp(son[x][i],L-1)\),可以记忆搜实现
$
$
//made by Hero_of_someone
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define db double
#define il inline
using namespace std;
int T,t,n,m,L,id[150];
char s[25][25];
db p[65];
struct Tire{
int son[540][65],fail[540],size,root,val[540];
bool vis[540][110]; db f[510][110];
il void init(){
size=1; root=0;
memset(son,0,sizeof(son));
memset(val,0,sizeof(val));
memset(vis,0,sizeof(vis));
memset(fail,0,sizeof(fail));
}
il void insert(char *s){
int cur=root;
for(int i=0;s[i];i++){
int idx=id[s[i]];
if(!son[cur][idx]) son[cur][idx]=size++;
cur=son[cur][idx];
}
val[cur]=1; return ;
}
il void build(){
int que[1010],hd=0,tl=0;
for(int i=0;i<n;i++)
if(son[root][i]){
que[tl++]=son[root][i];
fail[son[root][i]]=root;
}
else son[root][i]=root;
while(hd<tl){
int cur=que[hd++];
for(int i=0;i<n;i++){
int Son=son[cur][i];
if(Son){
int f=fail[cur];
while(f && !son[f][i]) f=fail[f];
fail[Son]=son[f][i];
val[Son]|=val[fail[Son]];
que[tl++]=Son;
}
else son[cur][i]=son[fail[cur]][i];
}
}
}
il db dfs(int x,int L){
if(!L) return 1.0;
if(vis[x][L]) return f[x][L];
vis[x][L]=1;
db ret=0.0;
for(int i=0;i<n;i++){
if(val[son[x][i]]) continue;
ret+=p[i]*dfs(son[x][i],L-1);
}
return f[x][L]=ret;
}
}AC;
il void init(){
AC.init();
scanf("%d",&m); for(int i=1;i<=m;i++) scanf("%s",s[i]);
scanf("%d",&n);
for(int i=0;i<n;i++){
char ss[10];
scanf("%s %lf",ss,&p[i]);
id[ss[0]]=i;
}
for(int i=1;i<=m;i++) AC.insert(s[i]);
}
il void work(){ AC.build(); scanf("%d",&L); printf("Case #%d: %.6lf\n",t,AC.dfs(0,L)); }
int main(){ scanf("%d",&T); for(t=1;t<=T;t++){ init(); work(); } return 0; }
沉迷AC自动机无法自拔之:[UVA 11468] Substring的更多相关文章
- 沉迷AC自动机无法自拔之:[BZOJ2434] [Noi2011] 阿狸的打字机
如标题所言,我已经沉迷于AC自动机无法自拔了... 这又是一道AC自动的题,红红火火恍恍惚惚 这题目做起来真舒服 简单概括一下:\(AC\)自动机\(fail\)树上树链剖分\(+\)树状数组 这种类 ...
- 沉迷AC自动机无法自拔之:穿越广场 square
如标题所言,我已经沉迷于AC自动机无法自拔了... 这又是一道AC自动的题,红红火火恍恍惚惚 穿越广场 [问题描述] L 国的仪仗队要穿越首都广场了.首都广场可以看做是一块 N*M 的矩形网格,仪仗队 ...
- 沉迷AC自动机无法自拔之:[UVALive 4126] Password Suspects
图片加载可能有点慢,请跳过题面先看题解,谢谢 一看到这么多模式串就非常兴奋,又是\(AC\)自动机 题目就是要求:经过 \(n\) 个节点,把所有单词都遍历一遍的方案数,和那道题差不多嘛 所以这样设: ...
- uva 11468 - Substring(AC自己主动机+概率)
题目链接:uva 11468 - Substring 题目大意:给出一些字符和各自字符相应的选择概率.随机选择L次后得到一个长度为L的字符串,要求该字符串不包括随意一个子串的概率. 解题思路:构造AC ...
- UVa 11468 Substring (AC自动机+概率DP)
题意:给出一个字母表以及每个字母出现的概率.再给出一些模板串S.从字母表中每次随机拿出一个字母,一共拿L次组成一个产度为L的串, 问这个串不包含S中任何一个串的概率为多少? 析:先构造一个AC自动机, ...
- UVA 11468 Substring (AC自动机)
用把失配边也加到正常边以后AC自动机,状态是长度递减的DAG,每次选一个不会匹配字符的转移. dp[u][L]表示当前在tire树上u结点长度还剩L时候不匹配的概率,根据全概率公式跑记忆化搜索. #i ...
- UVA 11468 Substring (记忆化搜索 + AC自动鸡)
传送门 题意: 给你K个模式串, 然后,再给你 n 个字符, 和它们出现的概率 p[ i ], 模式串肯定由给定的字符组成. 且所有字符,要么是数字,要么是大小写字母. 问你生成一个长度为L的串,不包 ...
- uva 11468 Substring
题意:给你 k 个模板串,然后给你一些字符的出现概率,然后给你一个长度 l ,问你这些字符组成的长度为 l 的字符串不包含任何一个模板串的概率. 思路:AC自动机+概论DP 首先用K个模板构造好AC自 ...
- AC自动机+全概率+记忆化DP UVA 11468 Substring
题目传送门 题意:训练指南P217 分析:没有模板串也就是在自动机上走L步,不走到val[u] == v的节点的概率 PS:边读边insert WA了,有毒啊! #include <bits/s ...
随机推荐
- Python3入门(十一)——IO编程
一.文件读写 python的文件操作和C是兼容的 1.读文本文件 读文件操作如下: f = open("F:/1.txt", "r") data = f.rea ...
- OWASP移动安全漏洞Top 10
•脆弱的服务器端安全控制 在OWASP排第一的漏洞是“脆弱的服务器端安全控制”,顾名思义,就是没有以一个安全的方式从移动应用程序向服务器端发送数据,或在发送数据时暴露了一些敏感的API.例如,考虑对一 ...
- 20155229《网络对抗技术》Exp6:信息收集与漏洞扫描
实验内容 (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服务的查点 (4)漏洞扫描:会扫,会看报告,会查漏洞说明,会修补 ...
- 20155302《网络对抗》Exp8 Web基础
20155302<网络对抗>Exp8 Web基础 实验内容 (1).Web前端HTML(0.5分) 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个 ...
- [python]记录Windows下安装matplot的经历
最近学习在看<机器学习实战>一书,第二章的时候要用到Natplotlib画图,于是便开始安装Matplotlib.本文所用到的所有安装包都可以在文末的链接中找到. 首先从Matplotli ...
- Java使用Redis学习笔记
如果我们使用Java操作Redis, 需要确保已经安装了 redis 服务及 Java redis 驱动. Maven项目可以直接在pom.xml中加入jedis包驱动: <dependency ...
- Express入门介绍vs实例讲解
下午在团队内部分享了express相关介绍,以及基于express的实例.内容提纲如下. 什么是Express 为什么要用Express 路由规则 一切皆中间件 实例:Combo Applicatio ...
- Katalon Studio学习笔记(二)——请求响应中文乱码解决方法
Katalon Studio接口测试发现返回的中文消息是乱码,这是因为KS的编码格式是UTF-8,因此导致中文字体出现乱码.如下图所示: 在我们的系统中添加一个名字为JAVA_TOOL_OPTIONS ...
- camscanner(扫描全能王)功能解析与复现
早就在用camscanner(扫描全能王)这个软件,感觉很不错. 主要功能: 1.页面截取校正 2.增强处理(灰度与颜色) 刚好最近工作与此相关,静心做点仿真,看看其中的操作原理,也做个demo玩玩. ...
- JMeter的下载安装以及运行教程
一.安装JMeter的必要准备 1.安装JDK JDK下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html ...