背景

Bob最近迷上了一个博彩游戏……

描述

这个游戏的规则是这样的:
每花一块钱可以得到一个随机数R,花上N块钱就可以得到一个随机序列;
有M个序列,如果某个序列是产生的随机序列的子串,那么就中奖了,否则不中。
Bob会告诉你这M个序列,和身上有的钱的总数N,当然还有R的范围。
请你告诉Bob中奖的概率有多少?

输入格式

第一行三个用空格隔开的数N、M和R的范围R。
其中1<=R<=9,0<N<=60,0<M<=20000。
下面M行每行一个字符串(长度小于等于20),字符串的每一位范围在1-r之间
保证必要运算都在64位整型范围内。

输出格式

一行一个实数,表示中奖的概率(保留小数点后5位小数)。

测试样例1

输入

5 1 3 
1

输出

0.86831

备注

数据分布:
第1个点~第10个点,每个点5分;
第11个点~第15个点,每个点10分。

对于样例的解释:
随机序列一共有3^5=243个,其中包含"1"的个数为211个,则概率为211/243=0.86831Bob HAN

/*
AC自动机+DP
f[i][j]表示将字符串扩展到i,在自动机上匹配到j的概率。
因为合法概率较难统计,所以最后答案为 1-不合法的概率。
要滚动一下数组。
*/
#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
#define N 400010
#define eps 0.000000001
using namespace std;
int a[N][],danger[N],point[N],n,m,r,size=;
double f[][N];char s[N];
queue<int> q;
void insert(){
int len=strlen(s),now=;
for(int i=;i<len;i++){
int t=s[i]-'';
if(!a[now][t]) a[now][t]=++size;
now=a[now][t];
}
danger[now]=;
}
void build(){
q.push();point[]=;
while(!q.empty()){
int now=q.front();q.pop();
for(int i=;i<=r;i++){
if(!a[now][i]){
a[now][i]=a[point[now]][i];
continue;
}
int k=point[now];
while(!a[k][i]) k=point[k];
point[a[now][i]]=a[k][i];
danger[a[now][i]]|=danger[point[a[now][i]]];
q.push(a[now][i]);
}
}
}
void dp(){
f[][]=;
for(int i=;i<=n;i++){
for(int j=;j<=size;j++){
if(danger[j]||f[i+&][j]<eps) continue;
for(int t=;t<=r;t++){
int k=j;
while(!a[k][t]) k=point[k];
f[i&][a[k][t]]+=f[i+&][j]/(double)r;
}
}
for(int j=;j<=size;j++)
f[i+&][j]=;
}
}
int main(){
scanf("%d%d%d",&n,&m,&r);
for(int i=;i<=r;i++) a[][i]=;
for(int i=;i<=m;i++){
scanf("%s",s);
insert();
}
build();dp();
double ans=;
for(int i=;i<=size;i++)
if(!danger[i]) ans+=f[n&][i];
printf("%.5f",1.0-ans);
return ;
}

最新文章

  1. 文件处理命令:awk
  2. OC----面向对象
  3. 3.Mybatis全局配置文件属性详解(SqlMapConfig.xml)
  4. mysql 优化配置参数详解
  5. Hadoop科普文——常见的45个问题解答(CSDN)
  6. 在指定的DSN中,驱动程序和应用程序之间的体系结构不匹配
  7. 【转】Xcode7.1环境下上架iOS App到AppStore 流程 (Part 一)
  8. Activity生命周期回顾
  9. JS 移动动画
  10. Windows 7中怎样找到真正的Administrator账户
  11. iOS ARC与MRC混编的一些解决方法
  12. Quill编辑器介绍及扩展
  13. 分享:Python中的位运算符
  14. poj 2451 Uyuw&#39;s Concert
  15. NuGet包断线续传下载
  16. Android layout_margin 无效的解决办法
  17. MySQL中SELECT语句简单使用
  18. 对Swoole、Workerman和php自带的socket的理解
  19. shell 按序删除文件
  20. mysql 时间戳转换 、cnd、dns 通俗理解

热门文章

  1. opensue &quot;Have a lot of fun...&quot;的出处
  2. JavaScript无提示关闭当前页面窗口,兼容IE/Firefox/Chrome
  3. javascript 完整知识点整理
  4. Java第7次作业:造人类(用private封装,用static关键字自己造重载输出方法)什么是面向对象程序设计?什么是类和对象?什么是无参有参构造方法 ?什么是封装?
  5. attachEvent和addEventListener 的使用方法和区别
  6. centos 安装 python3 分类链接
  7. 我如何解决Centos下cannot find a valid baseurl for repo的问题的
  8. GoogleTest 之路3-Mocking Framework
  9. lavarel 添加自定义辅助函数
  10. drf分页器