传送门

和bzoj1030一个德性

#include <queue>
#include <cstdio>
#include <cstring>
#define N 500001
#define LL long long int m, n, r, cnt;
LL f[61][N], ans, sum = 1;
int next[N][10], fail[N];
bool val[N];
char s[N];
std::queue <int> q; inline void insert()
{
int i, x, now = 0, len = strlen(s + 1);
for(i = 1; i <= len; i++)
{
x = s[i] - '0';
if(!next[now][x])
next[now][x] = ++cnt;
now = next[now][x];
}
val[now] = 1;
} inline void make_fail()
{
int i, now;
for(i = 1; i <= r; i++)
if(next[0][i])
q.push(next[0][i]);
while(!q.empty())
{
now = q.front();
q.pop();
for(i = 1; i <= r; i++)
{
if(!next[now][i])
{
next[now][i] = next[fail[now]][i];
continue;
}
fail[next[now][i]] = next[fail[now]][i];
val[next[now][i]] |= val[next[fail[now]][i]];
q.push(next[now][i]);
}
}
} int main()
{
int i, j, k;
scanf("%d %d %d", &m, &n, &r);
for(i = 1; i <= n; i++)
{
scanf("%s", s + 1);
insert();
}
make_fail();
for(i = 1; i <= m; i++) sum *= r;
f[0][0] = 1;
for(i = 1; i <= m; i++)
for(j = 0; j <= cnt; j++)
{
if(val[j] || !f[i - 1][j]) continue;
for(k = 1; k <= r; k++)
if(!val[next[j][k]])
f[i][next[j][k]] += f[i - 1][j];
}
for(i = 0; i <= cnt; i++) ans += f[m][i];
printf("%.5lf\n", double(sum - ans) / double(sum));
return 0;
}

  

[TyvjP1519] 博彩游戏(AC自动机 + DP)的更多相关文章

  1. tyvj P1519 博彩游戏(AC自动机+DP滚动数组)

    P1519 博彩游戏 背景 Bob最近迷上了一个博彩游戏…… 描述 这个游戏的规则是这样的:每花一块钱可以得到一个随机数R,花上N块钱就可以得到一个随机序列:有M个序列,如果某个序列是产生的随机序列的 ...

  2. 洛谷P3041 视频游戏的连击Video Game Combos [USACO12JAN] AC自动机+dp

    正解:AC自动机+dp 解题报告: 传送门! 算是个比较套路的AC自动机+dp趴,,, 显然就普普通通地设状态,普普通通地转移,大概就f[i][j]:长度为i匹配到j 唯一注意的是,要加上所有子串的贡 ...

  3. 博彩游戏(tyvj 1519)

    背景 Bob最近迷上了一个博彩游戏…… 描述 这个游戏的规则是这样的:每花一块钱可以得到一个随机数R,花上N块钱就可以得到一个随机序列:有M个序列,如果某个序列是产生的随机序列的子串,那么就中奖了,否 ...

  4. [JoyOI1519] 博彩游戏

    题目限制 时间限制 内存限制 评测方式 题目来源 1000ms 131072KiB 标准比较器 Local 题目背景 Bob最近迷上了一个博彩游戏…… 题目描述 这个游戏的规则是这样的:每花一块钱可以 ...

  5. tyvj1519博彩游戏

    博彩游戏 From admin 背景 Background Bob最近迷上了一个博彩游戏…… 描述 Description 这个游戏的规则是这样的:每花一块钱可以得到一个随机数R,花上N块钱就可以得到 ...

  6. POJ1625 Censored!(AC自动机+DP)

    题目问长度m不包含一些不文明单词的字符串有多少个. 依然是水水的AC自动机+DP..做完后发现居然和POJ2778是一道题,回过头来看都水水的... dp[i][j]表示长度i(在自动机转移i步)且后 ...

  7. HDU2296 Ring(AC自动机+DP)

    题目是给几个带有价值的单词.而一个字符串的价值是 各单词在它里面出现次数*单词价值 的和,问长度不超过n的最大价值的字符串是什么? 依然是入门的AC自动机+DP题..不一样的是这题要输出具体方案,加个 ...

  8. HDU2457 DNA repair(AC自动机+DP)

    题目一串DNA最少需要修改几个基因使其不包含一些致病DNA片段. 这道题应该是AC自动机+DP的入门题了,有POJ2778基础不难写出来. dp[i][j]表示原DNA前i位(在AC自动机上转移i步) ...

  9. hdu 4117 GRE Words AC自动机DP

    题目:给出n个串,问最多能够选出多少个串,使得前面串是后面串的子串(按照输入顺序) 分析: 其实这题是这题SPOJ 7758. Growing Strings AC自动机DP的进阶版本,主题思想差不多 ...

随机推荐

  1. SAP云平台,区块链,超级账本和智能合约

    前一篇文章<Hyperledger Fabric on SAP Cloud Platform>,我的同事Aviva已经给大家介绍了基于区块链技术的超级账本(Hyperledger)的一些概 ...

  2. scanf("%s",s)与gets(s)

    #include <stdio.h> void fun(char s[]) {; while(s[i]!='\0') {i++;} printf("%d",i);} v ...

  3. 二级域名绑定ECS

    关于阿里云域名的绑定,下面是个人的理解,如有错误请指出. 首先,任何域名都需要在阿里云备案后才可以使用, 如果是二级域名,不能单独备案,需要其顶级域名在阿里云备案. http://help.aliyu ...

  4. UVa 12219 Common Subexpression Elimination (stl,模拟,实现)

    一般来说,把一颗子树离散成一个int,把一个结点的字符离散成一个int会方便处理 直接map离散.当然一个结点最多只有4个小写字母,也可以直接编码成一个27进制的整数,舍掉0,为了区分0和0000. ...

  5. Ace 在HTML中使用方法

    <!DOCTYPE html> <html> <head> <title>Demo of ACE Editor</title> <!- ...

  6. 讲课笔记3——浮动、margin失效的问题、默认样式重置

    EO:搜索引擎优化,一般在网页里面只写一个h1标签,搜索引擎可以通过该h1标签里面的内容搜索你所写的网页(a标签和img标签最好写上title属性)标准写法: .logo { text-decorat ...

  7. CPP-基础:cout

    C++编程语言互换流中的标准输出流,需要iostream.h支持.读为 "c out". 使用范例 //用户输入的数字由cin保存于变量a中,并通过cout输出. #include ...

  8. struts2的动态方法配置

    动态方法调用配置 <package name="test" extends="struts-default"> <aciton name=&q ...

  9. Bootstrap历练实例:弹出提示信息的样式按钮

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  10. IAP介绍

    iOS应用调置 wjforstudy分享了IAP的一些基本知识.在论坛的地址是:http://www.cocoachina.com/bbs/read.php?tid=92060  1.在开始IAP开发 ...