题目

Problem Description

LLY作为信奥班唯一的妹子,始终保持着那份纯真,看她正在为箱子涂色。LLY现在有c种颜色,编号为0~c-1;还有n个箱子,编号为1~n,最开始每个箱子的颜色为1。LLY涂色时喜欢遵循灵感:它将箱子按编号排成一排,每次涂色时,她随机选择[L,R]这个区间里的一些箱子(不选看做选0个),为之涂上随机一种颜色。若一个颜色为a的箱子被涂上b色,那么这个箱子的颜色会变成(a*b)mod c。LLY想知道在k次涂色后,所有箱子颜色的编号和的期望为多少?

Input

第一行为T,表示有T组测试数据。
对于每组数据,第一行为三个整数n,c,k。
接下来k行,每行两个整数Li,Ri,表示第i个操作的L和R。
40%的数据1 <= T <= 5,1 <= n, k <= 15,2 <= c <= 20
100%的数据满足1 <= T <= 10,1 <= n, k <= 50,2 <= c <= 100,1 <= Li <= Ri <= n

Output

对于每组测试数据,输出所有箱子颜色编号和的期望值,结果保留9位小数。

Sample Input

3
3 2 2
2 2
1 3
1 3 1
1 1
5 2 2
3 4
2 4

Sample Output

2.062500000
1.000000000
3.875000000

分析

  • 题目大意

    • 给一个长度为 n 的数列以及 c 种(0~c-1)颜色,起始时全部数为 1
    • 有 k 次操作,每次给出一个区间 [L,R] ,可以在区间中选一些(也可以不选)数,把它“涂色”;
    • 规则是 若当前数为 a ,涂上 b ,那么这个数就变成了 (a*b)%c
    • 求 k 次操作后,这 n 个数的和 的期望值(也可以理解为每种情况一一列出,注意重复的也要重复写出,然后把他们的和加起来求个平均值)
  • 你会发现情况十分的多,反正我连样例的那个就已经列晕了,几乎可能把所有情况求出来,所以暴力不可取。
  • 然后可以换一个方向想一下,可以把最终每一位是哪个颜色的概率都求出来,(比如第 i 个箱子 是颜色 j 的概率是 dp[i][j]),那么总的期望就是每种颜色乘上概率再加起来就行了,于是就成了道概率 dp 的题目。
  • 每一次操作中每个位置上每种颜色的概率都可以由上一次操作所得到的信息来推出,具体看一看程序,大概就能懂了吧。
  • 还有一点要注意,区间每个位置都有一半的几率不被涂色,要把这个的答案也算上(也就是当前颜色的概率加上0.5)。

程序

#include <cstdio>
#include <cstring>
using namespace std;
int n,c,k,L,R,T;
double ans,f[55][105],g[55][105];
//f[i][j]   上一次操作第 i 个盒子颜色为 j 的概率
//g[i][j]   这一次操作第 i 个盒子颜色为 j 的概率 int main(){scanf("%d",&T);while (T--){ans=0;scanf("%d%d%d",&n,&c,&k);memset(f,0,sizeof(f));for (int i=1; i<=n; i++) f[i][1]=1;for (int t=1; t<=k; t++){scanf("%d%d",&L,&R);memset(g,0,sizeof(g));for (int i=L; i<=R; i++){           //讨论第 i 个盒子 for (int p=0; p<c; p++){        //上一次颜色 for (int j=0; j<c; j++){    //这一次涂色 g[i][j*p%c]+=f[i][p]*0.5/c;}g[i][p]+=f[i][p]*0.5;       //不涂色的情况}}for (int i=L; i<=R; i++)for (int j=0; j<c; j++)f[i][j]=g[i][j];}for (int i=1; i<=n; i++)for (int j=0; j<c; j++)ans+=f[i][j]*(double)j;printf("%.9f\n",ans);}
}

提示

  • 这里还有道概率DP的题目,可以看看。
  • 这是链接

GalaxyOJ-636 (概率DP)相关推荐

  1. 2018.09.01 poj3071Football(概率dp+二进制找规律)

    传送门 概率dp简单题. 设f[i][j]表示前i轮j获胜的概率. 如果j,k能够刚好在第i轮相遇,找规律可以发现j,k满足: (j−1)>>(i−1)(j−1)>>(i−1) ...

  2. Discovering Gold LightOJ - 1030[概率dp或者记忆化搜索]

    题目大意:有一个[1,n][1,n][1,n]的数轴,数轴上的每个对应位置上都有金矿,你初始位置是1,然后你每次都会投色子决定你下一步跳到哪里,如果你跳出了nnn,那么你就要重新投.问你跳到nnn的时 ...

  3. 【原创】概率DP总结 by kuangbin

    概率DP主要用于求解期望.概率等题目. 转移方程有时候比较灵活. 一般求概率是正推,求期望是逆推.通过题目可以体会到这点. 首先先推荐几篇参考的论文: <信息学竞赛中概率问题求解初探> & ...

  4. poj 3071 Football(概率dp)

    http://poj.org/problem? id=3071 大致题意:有2^n个足球队分成n组打比赛.给出一个矩阵a[][],a[i][j]表示i队赢得j队的概率.n次比赛的流程像这样France ...

  5. HDU 5001 概率DP || 记忆化搜索

    2014 ACM/ICPC Asia Regional Anshan Online 给N个点,M条边组成的图,每一步能够从一个点走到相邻任一点,概率同样,问D步后没走到过每一个点的概率 概率DP  測 ...

  6. hdu 3853 LOOPS 概率DP

    简单的概率DP入门题 代码如下: 1 #include<iostream> 2 #include<stdio.h> 3 #include<algorithm> 4 ...

  7. HDU - 4035 Maze(概率dp)

    题目链接:点击查看 题目大意:给出一个 n 个点的树,初始时位于点 1 ,每个点都会给出一个概率 k[ i ] 和一个概率 e[ i ] ,其代表的意义分别是: k[ i ] :在点 i 有 k[ i ...

  8. SDUT - 2623 The number of steps(概率dp)

    题目链接:点击查看 题目大意:给出一个 n 层的三角形,第一层有 1 个点,第二层有 2 个点,第三层有 3 个点 ... 第 n 层有 n 个点,现在规定从第一层的点向下出发: 如果左下方有点并且右 ...

  9. 牛客练习赛26B 烟花 (概率DP)

    链接:https://ac.nowcoder.com/acm/contest/180/B 来源:牛客网 烟花 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5 ...

  10. Collecting Bugs POJ - 2096(基础概率dp+期望模板)

    题意: 有s个系统,n种bug,小明每天找出一个bug,可能是任意一个系统的,可能是任意一种bug,即是某一系统的bug概率是1/s,是某一种bug概率是1/n. 求他找到s个系统的bug,n种bug ...

最新文章

  1. Udacity机器人软件工程师课程笔记(十九) - 3D感知介绍 - 主动/被动式传感器、RGB-D相机、点云
  2. C语言main函数、return、exit函数
  3. K-means算法应用:压缩图片
  4. Three.js入门
  5. html 手机分辨率,移动端各种分辨率手机屏幕----适配方法集锦
  6. hive 删除分区_数据仓库工具hive面试题集锦(纯干货)
  7. 时间序列分析(6)| DF检验
  8. android webview缩放功能,在Android WebView中启用/禁用缩放
  9. Excel 制作甘特图(多图)
  10. 【新书推荐】【2018.07】计算电磁学的MATLAB仿真(第四版)
  11. Vue 下载本地静态资源static文件夹
  12. 计算机网络:循环冗余码CRC
  13. win7注册表编辑已被管理员禁用怎么办
  14. 工具类之十七 基于zxing的二维码生成工具类
  15. Linux下常用软件安装指南
  16. 暗影精灵7安装Ubuntu双系统、RTX3060 Nvidia 驱动及搭建深度学习环境
  17. 四十七、使用bootstrap中的选项卡制作产品特色页面
  18. 抖音短视频数据抓取实战系列(三)——Fiddler抓取抖音用户详细信息数据
  19. 计算 11+12+13+...+m python
  20. spring(@RequestPart)同时上传表单数据和文件

热门文章

  1. 玩转直播:如何从 0 到 1 构建简单直播系统
  2. 黑鲨Android系统耗电高,已达安卓顶配,黑鲨2pro作为主力机,聊聊使用感受
  3. python如何判断tcp异常断开_TCP socket如何判断连接断开
  4. C语言实现操作系统简单的P V操作
  5. 网购可到家门口的报亭提货了
  6. cyusb3014的slavefifo程序的解读
  7. “钢铁直猿”专属,5·20硬核表白方式三连击
  8. Jupyter Notebook连接服务器失败
  9. 已解决:注册kaggle人机验证出不来
  10. 算法:十六进制最大数