【Codeforces Round #301 (Div. 2) D】 Bad Luck Island
【链接】 我是链接,点我呀:)
【题意】
剪刀、石头、布各有r,s,p个生活在同一个村子里。
它们两两之间相遇的几率都相同(相遇后就会按照划拳的规则判断输赢,输的人就死掉了)。
问你最后只剩下剪刀,只剩下石头、只剩下布活着的概率。
【题解】
动态规划
如果从输赢方面去考虑的话很难找到解。
设f[i][j][k]表示石头,剪刀,布分别剩下i,j,k只活着的概率。
显然有i*j+i*k+j*k种可能。
而(i,j,k)这个状态,变成(i-1,j,k)这个状态,显然就是石头的个数减少1了。
那么就是石头遇到了布,也即其中的i*k种可能。
那么从(i,j,k)转移到(i-1,j,k)这个过程,就是f[i][j][k]*转移的概率。其中转移的概率=$\frac{i*k}{i*j+i*k+j*k}$
其他的转移同理
最后ans1 = f[i][0][0] ans2 = f[0][i][0] ans3 = f[0][0][i];
【代码】
#include <bits/stdc++.h>
using namespace std;
const int N = 100;
int r,s,p;
double f[N+10][N+10][N+10];
int main(){
#ifdef LOCAL_DEFINE
freopen("rush_in.txt", "rt", stdin);
#endif
scanf("%d%d%d",&r,&s,&p);
f[r][s][p] = 1;
for (int i = r;i >= 0;i--)
for (int j = s;j >= 0;j--)
for (int k = p;k >= 0;k--){
double temp = i*j + i*k + j*k;
if (i*j==0 && i*k==0 && j*k==0) continue;
if (i) f[i-1][j][k] += f[i][j][k]*((1.0*i*k)/temp);
if (j) f[i][j-1][k] += f[i][j][k]*((1.0*i*j)/temp);
if (k) f[i][j][k-1] += f[i][j][k]*((1.0*j*k)/temp);
}
double ans1 = 0,ans2 = 0,ans3 = 0;
for (int i = 1;i <= r;i++) ans1+=f[i][0][0];
for (int i = 1;i <= s;i++) ans2+=f[0][i][0];
for (int i = 1;i <= p;i++) ans3+=f[0][0][i];
printf("%.12f %.12f %.12f\n",ans1,ans2,ans3);
return 0;
}
【Codeforces Round #301 (Div. 2) D】 Bad Luck Island的更多相关文章
- 【Codeforces Round #301 (Div. 2) E】Infinite Inversions
[链接] 我是链接,点我呀:) [题意] 给你一个无限长的序列1,2,3,4... 然后给你n个操作. 每个操作ai,bi; 表示调换位置为ai和位置为bi的数的位置. (ai,bi<=10^9 ...
- 【Codeforces Round #301 (Div. 2) C】 Ice Cave
[链接] 我是链接,点我呀:) [题意] 给你一个n*m的地图. 每个地图为0的时候可以安全走过,且走过后变成1. (一定要离开之后才会变成1) 而为1的则走过之后会掉入下一层. 你一开始在初始位置( ...
- 【Codeforces Round #301 (Div. 2) B】 School Marks
[链接] 我是链接,点我呀:) [题意] 已知k门成绩. 总共有n门成绩. 让你构造剩下的n-k门成绩,使得这n门成绩的中位数>=y,并且这n门成绩的和要小于等于x. n为奇数 [题解] 首先判 ...
- 【Codeforces Round #301 (Div. 2) A】 Combination Lock
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 模拟水题 [代码] #include <bits/stdc++.h> using namespace std; cons ...
- 【Codeforces Round #432 (Div. 1) B】Arpa and a list of numbers
[链接]h在这里写链接 [题意] 定义bad list是一个非空的.最大公约数为1的序列.给定一个序列,有两种操作:花费x将一个元素删除.花费y将一个元素加1,问你将这个序列变为good list所需 ...
- 【Codeforces Round #420 (Div. 2) C】Okabe and Boxes
[题目链接]:http://codeforces.com/contest/821/problem/C [题意] 给你2*n个操作; 包括把1..n中的某一个数压入栈顶,以及把栈顶元素弹出; 保证压入和 ...
- 【Codeforces Round #420 (Div. 2) B】Okabe and Banana Trees
[题目链接]:http://codeforces.com/contest/821/problem/B [题意] 当(x,y)这个坐标中,x和y都为整数的时候; 这个坐标上会有x+y根香蕉; 然后给你一 ...
- 【Codeforces Round #420 (Div. 2) A】Okabe and Future Gadget Laboratory
[题目链接]:http://codeforces.com/contest/821/problem/A [题意] 给你一个n*n的数组; 然后问你,是不是每个位置(x,y); 都能找到一个同一行的元素q ...
- 【Codeforces Round #423 (Div. 2) C】String Reconstruction
[Link]:http://codeforces.com/contest/828/problem/C [Description] 让你猜一个字符串原来是什么; 你知道这个字符串的n个子串; 且知道第i ...
随机推荐
- MongoDB(六)java操作mongodb增删改查
java操作mysql数据库的代码我们已经了如指掌了.增删改查,java对mongodb数据库也是类似的操作,先是数据库连接.再是进行操作. 首先我们进入进入admin数据库.然后建立自己的数据库te ...
- C# 爬虫总结
static void Main(string[] args) { //WebRequest request = WebRequest.Create("http://www.cnblogs. ...
- HDU 2017 Multi-University Training Contest - Team 4 1009 1011
Questionnaire Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)T ...
- 原生JS实现页面内定位
需求:点击跳转到页面指定位置 <div id="test">点击跳转到此处</div> [法一]: 利用a标签的锚点跳转 <a href=" ...
- 小米开源文件管理器MiCodeFileExplorer-源码研究(7)-Favorite收藏管理和SQLite数据库CRUD
FavoriteDatabaseHelper,存储favorite数据,到SQLite数据库.SQLiteOpenHelper是一个帮助管理数据库和版本的工具类.通过继承并重载方法,快速实现了我们自己 ...
- 【Codeforces Round #457 (Div. 2) C】Jamie and Interesting Graph
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 找比n-1大的最小的素数x 1-2,2-3..(n-2)-(n-1)长度都为1 然后(n-1)-n长度为(x-(n-2)) 然后其他 ...
- wpf--------------datagrid全选反选 多选进行删除操作 前后台
前台绑定 <DataGrid.Columns> <DataGridTemplateColumn > <DataGridTemplateColumn.HeaderTempl ...
- Axios再记录
一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端(可实现ajax的请求) 有关学习网址:https://www.tuicool.com/articles/eMb2yuY ...
- 用openssl生成含有中文信息的证书
openssl 支持 ASCII 和 UTF-8 两种编码,应该可以制作中文证书. 在生成证书签发申请时,当输入中文则 openssl 报错,这是因为当前输入的字符是 ANSI 本地编码格式,超出了 ...
- 洛谷P1316 丢瓶盖
题目描述 陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢? 输入输出 ...