【NOIP2012模拟10.31】掷骰子
来源:互联网 发布:js get set 编辑:程序博客网 时间:2024/04/29 04:48
题目
太郎和一只免子正在玩一个掷骰子游戏。有一个有N个格子的长条棋盘,太郎和兔子轮流掷一个有M面的骰子,骰子M面分别是1到M的数字.且掷到任意一面的概率是相同的.掷到几.就往前走几步.当谁走到第N格时,谁就获胜了。游戏中还有一个规则“反弹”.就是当一位选手要走到第N格外时.他就会后退(就像飞行棋进营一样)。
假设现在一位追手在A格.当他掷出B时:1.A+B<N,走到第A+B.络,2.A+B=N,走到第N格,获胜。3.A+B≥N,走到第(N-(A+B-N)格现在太郎和兔子分别在第x和y格.接下来是太郎掷骰子,太郎想知道他赢得比赛的概率就多少。
分析
设
我们分四种情况:
1、i+m<=n and j+m<=n2、i+m>n and j+m<=n3、i+m<=n and j+m>n4、i+m>n and j+m>n
why?
因为发现,当
情况一:i+m<=n and j+m<=n
因为i走到k的概率为
那么状态(i,j)的胜率就是状态(k,l)胜率的总和。
情况二:i+m>n and j+m<=n
显然i有
情况三:i+m<=n and j+m>n
同样j有m种可能,但不能让他到达终点,那么就不用在计算,所以乘以(m-1)。
而当i在n-m这个位置时,i也有
情况四:i+m>n and j+m>n
要求i赢,所以
当i第一回合就走到了n,概率为
当i第一回合没有走到n,而j也不能走到n,在第二回合i走到了n概率为
如果在第二回合i还是没有走到n,而j还是不能走到n,在第三回合i走到了n概率为
如此类推,
等比数列求和
因为数列的公比小于1,
解得
但是这样是
#include <cmath>#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>#include <queue>const int maxlongint=2147483647;const int mo=1000000007;const int N=2005;using namespace std;double f[N][N],n,m,x,y;double val(int x1,int y1,int x2,int y2){ return f[x1][y1]-f[x1][y2]-f[x2][y1]+f[x2][y2];}int main(){ scanf("%lf%lf%lf%lf",&n,&m,&x,&y); for(int i=n;i>=1;i--) for(int j=n;j>=1;j--) { f[i][j]=f[i+1][j]+f[i][j+1]-f[i+1][j+1]; if(i==n) { f[i][j]++; continue; } if(j==n) continue; if(i+m>n && j+m>n) f[i][j]+=m/(2*m-1); else if(i+m>n) f[i][j]+=val(i,j+1,i+1,j+m+1)*(m-1)/m/m+1/m; else if(j+m>n) f[i][j]+=(m-1)*val(i+1,j,i+1+m,j+1)/m/m+(i==n-m)/m/m; else f[i][j]+=val(i+1,j+1,i+m+1,j+m+1)/(m*m); } printf("%.6lf",val(x,y,x+1,y+1));}
1 0
- 【NOIP2012模拟10.31】掷骰子
- 【NOIP2012模拟10.31】掷骰子
- JZOJ3072. 【NOIP2012模拟10.31】掷骰子
- JZOJ【3072】【NOIP2012模拟10.31】掷骰子
- 【NOIP2012模拟11.1】骰子游戏
- JZOJ3082. 【NOIP2012模拟11.1】骰子游戏
- jzoj3082. 【NOIP2012模拟11.1】骰子游戏
- 模拟掷骰子
- python模拟掷骰子
- 模拟骰子
- 模拟骰子
- 【程序12】模拟掷骰子游戏
- [算法]Java实现 模拟掷骰子
- 编程算法之模拟法-掷骰子
- 【NOIP 模拟题】掷骰子(dp)
- noip2012 寻宝 (模拟)
- 【NOIP2012模拟8.20】Memory
- 【NOIP2012模拟8.20】Memory
- 安装Hadoop及Spark for Ubuntu 16.04
- UVA 10285 Longest Run on a Snowboard
- HDOJ 1875 畅通工程再续(最小生成树)
- CCF 游戏
- 用字符数组输出特定汉字
- 【NOIP2012模拟10.31】掷骰子
- 2016.8.18
- 我的第一篇博客
- 2016多校训练Contest10: 1005 Road hdu5861
- Angular中使用$watch监听object属性值的变化
- 学习tomcat之servlet容器
- NOIP2011 聪明的质监员 解题报告(二分+ 前缀和处理)
- 坚持#第14天~啊,忘了几天
- JDK 中的证书生成和管理工具 keytool