P1519 博彩游戏

时间: 1000ms / 空间: 131072KiB / Java类名: Main

背景

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自动机后,在AC自动机上做DP,这里要用到滚动数组。
用f[i][j]来表示长度为i,转移到j号节点时没有构成任意一个单词时的情况。
总情况是r^n减去Σf[n][i]即可。。。
 1 #include<set>
 2  #include<cstdio>
 3  #include<queue>
 4  #include<cstring>
 5  #include<iostream>
 6  using namespace std;
 7  typedef long long LL;
 8    const int N=20000+5,L=20+5;
 9    const int node = N*L;
10    const int sigma = 10;
11    
12    char s[L]; int n,m,r; LL d[2][node];
13    
14    struct ACauto{
15        int ch[node][sigma],f[node],val[node],sz;
16        void clear() {
17            sz=1; memset(ch[0],0,sizeof(ch[0]));
18        }
19        void insert(char *s) {
20            int n=strlen(s),u=0;
21            for(int i=0;i<n;i++) {
22                int c=s[i]-'1';
23                if(!ch[u][c]) {
24                    memset(ch[sz],0,sizeof(ch[sz]));
25                    val[sz]=0; ch[u][c]=sz++;
26                }
27                u=ch[u][c];
28            }
29            val[u]=1;
30        }
31        void get_Fail() {
32            queue<int> q;
33            f[0]=0;
34            for(int c=0;c<r;c++) 
35                if(ch[0][c]) f[ch[0][c]]=0,q.push(ch[0][c]);
36            while(!q.empty()) {
37                int qr=q.front(); q.pop();
38                for(int c=0;c<r;c++) {
39                    int u=ch[qr][c]; if(!u) continue;
40                    q.push(u);  int v=f[qr];
41                    while(v&&!ch[v][c]) v=f[v];
42                    if(val[ch[v][c]]) val[u]=1;
43                    f[u]=ch[v][c];
44                }
45            }
46         }
47    }ac;
48    int que[2][N],cnt[2];
49    int main() {
50        //freopen("in.in","r",stdin);
51        //freopen("out.out","w",stdout);
52        scanf("%d%d%d",&m,&n,&r);
53        ac.clear();
54        for(int i=0;i<n;i++) {
55            scanf("%s",s); ac.insert(s);
56        }
57        ac.get_Fail();
58        d[0][0]=1;
59        int x=0;
60        for(int i=1;i<=m;i++) {
61            x^=1;
62            memset(d[x],0,sizeof(d[x]));
63            for(int j=0;j<ac.sz;j++) if(!ac.val[j]&&d[x^1][j]) {
64                for(int c=0;c<r;c++) {
65                    int k=j; while(!ac.ch[k][c]&&k) k=ac.f[k];
66                    d[x][ac.ch[k][c]]=d[x^1][j]+d[x][ac.ch[k][c]];
67                }
68            }
69        }
70        LL ans1=0,ans2=1;
71        for(int i=1;i<=m;i++) ans2*=(LL)r;
72        for(int i=0;i<ac.sz;i++)
73            if(!ac.val[i]) ans1+=d[x][i];
74        double f=((double)ans2-(double)ans1)/(double)ans2;
75        printf("%.5f\n",f);
76        return 0;
77    }
View Code

 

转载于:https://www.cnblogs.com/htwx/articles/5590055.html

简介 ecshop系统logo ECShop是上海商派网络科技有限公司(ShopEx)旗下——B2C独立网店系统,适合企业及个人快速构建个性化网上商店。系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源程序。 ECShop悉心听取每一位商家的需求与建议,不仅设计了人性化的网店管理系统帮助商家快速上手,还根据中国人的购物习惯改进了购物流程,实现更好的用户购物体验。 经过近两年的发展,ECShop网店系统无论在产品功能、稳定性、执行效率、负载能力、安全性和SEO支持(搜索引擎优化)等方面都居国内同类产品领先地位,成为国内最流行的购物系统之一。 服务 灵活的模版机制 ECShop开发了独有的高效模板引擎(2.15以前版本使用smarty模板引擎),并结合了Dreamweaver的模板和库功能,使得编辑制作模板变得更简单。 开放的插件机制 支付、配送,会员整合都是以插件形式实现。商家可以随时增加或变更的支付方式和配送体系。ecshop支持大部分php开发的论坛系统,包括discuz,phpwind等,只需在后台做简单参数配置,即可完成会员整合。 功能 AJAX 化 ECSHOP 使用流行的 AJAX 技术,批量数据编辑变得更迅速,方便。 促销功能 ECSHOP提供了积分、红包、赠品,夺宝奇兵等多种促销方法。 高效率的代码和执行性能 通过优化代码与数据库结构,配合ecshop独家设计的缓存机制,在不考虑网速的情况下,网店动态页面与纯静态页面访问速度相当。 常规功能的更完善实现 针对常规功能尤其是后台管理和购物流程,ECShop进行了更简洁的设计,实现更好的用户体验。 搜索引擎优化 在 SEO (搜索引擎优化)上,ECShop独家支持两种 URL 重写方式,并且是同类软件中第一家支持 google / yahoo / microsoft 三家共同发布的 sitemaps 0.9 网站索引规范,能够为站点被搜索引擎收录做到最大限度的支持和帮助。 内置手机短信网关 ECShop内置手机短信网关,支持会员信息,订单提醒等功能。 多语言支持 支持简体,繁体,英文。 源代码开放 用户可根据自己的需求对ECSHOP进行定制,扩展。 随着3G网络的普及,智能手机的大量使用,手机上网的用户越来越多,使手机购物成为可能,手机购物势必会成为一种趋势,ECshop2.7.2版本新增手机浏览html功能。并且新增商品规格分库存功能,方便商家管理不同规格货品的库存。在商品详情页新增购买记录,提高网店的活跃性。html编辑器上传图片后增加水印功能。改进编辑快递单功能,增加可视化编辑,方便管理员修改打印快递单。商品分类页排序按钮变更为更流行的按钮样式,使之更加人性化。上传商品相册图片,使之能够支持外链图片。 历史 ECShop 2005年底,2006年初,高春辉和李梁(时任手机之家总经理),因为在给朋友建网上商城的时候,发现没有一个好用的商城软件,萌生了自己制作一个商城软件的想法。 2006年3月,从零开始招兵买马,组建团队,2006年6月,ECShop推出第一个版本1.0,但因为功能比较单一,最终使用的用户没有超过10个。 2006年6~7月,高春辉开始全面介入ECShop的开发管理工作,大大的加速了ECShop的开发进度,在推出 2.0版本之后,陆续推出了2.0.1,2.1,2.1.1.,2.1.2,2.1.3等版本后,用户群逐步扩大,安装量突破5万。 2007年5~6月,ECShop管理层与康盛世纪接触,最终确定,将ECShop卖给康盛世纪。 2007年6~7月,ECShop完成了一个重要的项目摩托罗拉手机商城。 2007年9月,ECShop团队全部迁至康盛世纪上班,交易完成。 2007年9月,ECShop分为两个团队,ECShop|(买否网), (卖否网);ECMall。 2008年10月10日,ECShop系列软件(包括Ecshop、Ecmall、Maifou等),被上海商派网络科技有限公司(ShopEx)整体收购。 2009年3月,发布2.6.2版本,这是其加入上海商派网络科技有限公司(ShopEx)之后的最新版本。 2010年6月,发布 ECShop v2.7.2 Release 0604。 2012年4月,发布 ECShop v2.7.3 Release 0411。 2012年11月,发布ECShop v2.7.3 Release 1106。 编辑本段 团队介绍 原团队介绍 高春辉 著名第一代互联网人,1989年接触电脑,1997年创建了当时访问量最高的个人主页“ 高春辉的个人网站”,被评为中国十大个人网站第一名。1999年受金山公司邀请,共同发起金山卓越网并担任总经理。2002年创立手机之家。ECShop创始人,ECShop灵魂,主要负
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值