题意:

给你n个串,求长度为l的串包含n个串个数的期望。

思路:

自动机dp[i][j][k] 长度为i在节点j状态为k的概率。

然后遍历一遍求期望。

代码:

#include"cstdlib"
#include"cstdio"
#include"cstring"
#include"cmath"
#include"queue"
#include"algorithm"
#include"iostream"
#include"map"
#include"stack"
#define N 123
#define eps 1e-8
using namespace std;
double dp[20][N][277];
int n,len;
struct Trie
{int next[N][27],fail[N],mark[N];int root,L;int newnode(){memset(next[L],-1,sizeof(next[L]));mark[L]=0;fail[L++]=-1;return L-1;}void go(){L=0;root=newnode();}void init(char *v,int id){int p=root;for(int i=0; v[i]; i++){int tep=v[i]-'a';if(next[p][tep]==-1) next[p][tep]=newnode();p=next[p][tep];}mark[p]|=(1<<id);}void build(){queue<int>q;q.push(root);while(!q.empty()){int p=q.front();q.pop();for(int i=0; i<26; i++){if(next[p][i]==-1){if(p==root) next[p][i]=root;else next[p][i]=next[fail[p]][i];}else{if(p==root) fail[next[p][i]]=root;else fail[next[p][i]]=next[fail[p]][i];q.push(next[p][i]);if(p!=root) mark[next[p][i]]|=mark[next[fail[p]][i]];}}}}void solve(){memset(dp,0,sizeof(dp));dp[0][0][0]=1.0;for(int i=1; i<=len; i++){for(int j=0; j<L; j++){for(int k=0; k<(1<<n); k++){for(int o=0; o<26; o++){int tep=next[j][o];dp[i][tep][mark[tep]|k]+=1.0/26*dp[i-1][j][k];}}}}double ans=0;for(int i=0; i<L; i++){for(int j=1; j<(1<<n); j++){int cnt=0;for(int k=0; k<n; k++) if(j&(1<<k)) cnt++;ans+=cnt*dp[len][i][j];}}printf("%.6f\n",ans);}
} ac;
int main()
{int t;cin>>t;while(t--){scanf("%d%d",&n,&len);ac.go();for(int i=0; i<n; i++){char x[123];scanf("%s",x);ac.init(x,i);}ac.build();ac.solve();}return 0;
}

[AC自动机+dp] whu oj 1572 I - Cyy and Fzz相关推荐

  1. uvalive4842(AC自动机+DP)

    题意: 给出猴子打字时打某个字母的概率,猴子最多可以敲键盘m次,问得到的长度是m的单词包含模式串的概率. 思路: AC自动机+dp. 首先,我们用模式串构造一个AC自动机,用dp[i]][j]表示当前 ...

  2. HDU 2296 Ring AC自动机 + DP

    题意:给你n个模式串,每个模式串有一个得分,让你构造出一个长度为N之内且分数最高的文本串;输出字典序列最小的. 解题思路:  AC自动机 + DP , 不过要输出字典序列最小,多开一个 一个三维字符串 ...

  3. bzoj 1030: [JSOI2007]文本生成器(AC自动机+DP)

    1030: [JSOI2007]文本生成器 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 5187  Solved: 2136 [Submit][St ...

  4. 【BZOJ】4861: [Beijing2017]魔法咒语 AC自动机+DP+矩阵快速幂

    [题意]给定n个原串和m个禁忌串,要求用原串集合能拼出的不含禁忌串且长度为L的串的数量.(60%)n,m<=50,L<=100.(40%)原串长度为1或2,L<=10^18. [算法 ...

  5. WHU 1572 Cyy and Fzz (AC自动机 dp )

    题意: 给出n个串,求任意长度为m的字符串包含串的个数的期望.(n<=8,m<=14,给定串的长度不超过12). Solution: 首先可以想到应该用概率DP,我们需要至少3维,dp[i ...

  6. WHU 1572 Cyy and Fzz(AC自动机+dp)

    题意:给出n个模板串,随机一个串,求出现模板串个数的期望(相同算一个). 做法:比赛时误以为是求模板串出现了几次,用dp[i][j]代表在第i个节点还要走l步的期望,然后记忆化搜索..不停的wa.. ...

  7. woj1572 Cyy and Fzz KMP / AC自动机 + DP

    题目:http://acm.whu.edu.cn/land/problem/detail?problem_id=1572 题意:  有n个目标串,长度均小于15,(n<=8),现在随机写一个长度 ...

  8. HOJ 13108 Just Another Knapsack Problem (AC自动机+dp)

    这套题是我们学长出的,质量都很高.不过我们OJ真的是太卡时间了.. 题意很简单,给一个目标串,以及很多模板串,每个模板串都有个value,可以重复用,问拼成目标串得到的最大value是多少. 学长的题 ...

  9. POJ 3691 DNA repair AC自动机 + DP

    题意:给你只包含'A','G','T','C'四个字母的n个模板串和1个文本串,问你文本串改变多少个字符就可以使得文本串中没有一个模板串 解题思路: 我们可以知道  dp[i][j] 为文本串到 第i ...

最新文章

  1. 双轴机械臂位置闭环控制:STC8H1K28,42HS48EIS,BH32
  2. 华为nova5ipro的优缺点_华为nova5pro和nova5i的区别
  3. 第五节 19可空数据类型
  4. MATLAB AppDesigner 设计UI界面中调用自定义函数
  5. swift-01-利用元组判断字符串出现次数
  6. Spring Boot集成RabbitMQ发送接收JSON
  7. 给angularJs grid列上添加自定义按钮
  8. C++ - 派生类访问模板基类(templatized base class)命名
  9. 【Unity】常用API和功能
  10. 关于swf转fla 软件的间题
  11. 计算机性能在线测评,电脑性能在线测试
  12. cf英文名字格式好看的_cf好看的英语名字格式,有你想要的!
  13. Laravel学习笔记(8)利用SEEDER或者模型工厂批量导入数据
  14. android 添加子view,如何在Android中向ImageView添加子视图
  15. pixel-anchor 相关概念
  16. Java的在哪里找labor_LaborDay哪里玩
  17. 火星人的耳机(Martian Headsets)
  18. 语音合成工具Coqui TTS安装及体验
  19. 往事如烟 - 简朴的老白树
  20. 服务器显示时间差8个小时,服务器时间相差8小时 原因与解决方法

热门文章

  1. 微信网页扫码登录的实现(两种方式)
  2. H266 ISP 帧内子划分
  3. 小白一键重装linux系统重装,小白一键重装系统官网
  4. 宏观经济学 - 国民收入的决定:收入-支出模型
  5. pubwinol免刷_Pubwin万象OL实名一键自动处理程序
  6. Java—mysql缓存导致查询结果与数据库不一致
  7. 高通4G全网通骁龙410系列-MSM8916(M9+) ( Cortex-A53架构)
  8. 隐马尔科夫模型(HMMM)
  9. 【教程】非常好用!一键彻底关闭Win10自带Windows Defender杀毒软件
  10. 运营之光:我的互联网运营方法论与自白学习总结(思维导图)