P2059 [JLOI2013]卡牌游戏
题目描述
N个人坐成一圈玩游戏。一开始我们把所有玩家按顺时针从1到N编号。首先第一回合是玩家1作为庄家。每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张卡片,假设卡片上的数字为X,则庄家首先把卡片上的数字向所有玩家展示,然后按顺时针从庄家位置数第X个人将被处决即退出游戏。然后卡片将会被放回卡牌堆里并重新洗牌。被处决的人按顺时针的下一个人将会作为下一轮的庄家。那么经过N-1轮后最后只会剩下一个人,即为本次游戏的胜者。现在你预先知道了总共有M张卡片,也知道每张卡片上的数字。现在你需要确定每个玩家胜出的概率。
这里有一个简单的例子:
例如一共有4个玩家,有四张卡片分别写着3,4,5,6.
第一回合,庄家是玩家1,假设他选择了一张写着数字5的卡片。那么按顺时针数1,2,3,4,1,最后玩家1被踢出游戏。
第二回合,庄家就是玩家1的下一个人,即玩家2.假设玩家2这次选择了一张数字6,那么2,3,4,2,3,4,玩家4被踢出游戏。
第三回合,玩家2再一次成为庄家。如果这一次玩家2再次选了6,则玩家3被踢出游戏,最后的胜者就是玩家2.
输入输出格式
输入格式:
第一行包括两个整数N,M分别表示玩家个数和卡牌总数。
接下来一行是包含M个整数,分别给出每张卡片上写的数字。
输出格式:
输出一行包含N个百分比形式给出的实数,四舍五入到两位小数。分别给出从玩家1到玩家N的胜出概率,每个概率之间用空格隔开,最后不要有空格。
输入输出样例
输入样例#1: 复制
5 5
2 3 5 7 11
输出样例#1: 复制
22.72% 17.12% 15.36% 25.44% 19.36%
输入样例#2: 复制
4 4
3 4 5 6
输出样例#2: 复制
25.00% 25.00% 25.00% 25.00%
说明
对于30%的数据,有1<=N<=10
对于50%的数据,有1<=N<=30
对于100%的数据,有1<=N<=50 1<=M<=50 1<=每张卡片上的数字<=50
dp
用\(f[i][j]\) 表示在还剩\(i\) 个人时第\(j\)个人的获胜概率,边界为\(f[1][1]=1\),每次设定都为当前所剩玩家中第一个玩家坐庄。每次穷举每一张牌递推即可
#include<iostream>
#include<cstdio>using namespace std;int i,m,n,j,k,a[100];
double f[100][100];int main()
{scanf("%d%d",&n,&m);for(i=1;i<=m;i++) scanf("%d",&a[i]);f[1][1]=1.0;for(i=2;i<=n;i++)for(j=1;j<=m;j++){int t=(a[j]+1)%i; if(!t) t=i;for(int l=1;l<i;l++)if((l+t-1)%i) f[i][(l+t-1)%i]+=f[i-1][l]/m;else f[i][i]+=f[i-1][l]/m; }for(i=1;i<=n;i++) printf("%.2lf%% ",f[n][i]*100);
}
转载于:https://www.cnblogs.com/ZUTTER/p/9610292.html
P2059 [JLOI2013]卡牌游戏相关推荐
- (概率/dp)P2059 [JLOI2013]卡牌游戏
https://www.luogu.org/problemnew/show/P2059 第一次做概率dp的题,还以为要用组合数学知识去推公式 上次牛客也遇到概率dp的题,就忘了补题 考虑从1个人正推到 ...
- [luogu2059 JLOI2013] 卡牌游戏 (概率dp)
[luogu2059 JLOI2013] 卡牌游戏 (概率dp) 题目描述 N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等 ...
- [BZOJ] 3191 [JLOI2013]卡牌游戏
Time Limit: 10 Sec Memory Limit: 128 MB Submit: 725 Solved: 487 [Submit][Status][Discuss] Descriptio ...
- 【BZOJ 3191】[JLOI2013]卡牌游戏
注意 最后一个没有空格!!!!! 题解(摘自网络) 有一个很重要的性质:当前人获胜的概率只与其在排列中与庄家的相对位置和人数有关..跟具体有哪些人无关.. 那么我们可以用f[i][j]表示还有i人时从 ...
- 【概率DP】$P2059$ 卡牌游戏
[概率DP]P2059 卡牌游戏 链接 题目描述 N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张 ...
- 牛客--卡牌游戏 (概率DP 逆推) P2059
题目链接:卡牌游戏 n个人,m张卡牌上有m个数字.庄家随机一张卡牌,数字为X,第X位出局,随后第X位的下一位做庄家,问,每个人最后获胜的概率是多少? 约瑟夫环的变形问题,这里每次等概率的抽牌,数字相对 ...
- 【JLOI2013合集】BZOJ3090 赛车 BZOJ3091 卡牌游戏 BZOJ3092 删除物品 BZOJ3093 地形生成...
赛车: 这个题就是水平可见直线.. 水平可见直线怎么做呢.. 就是把所有直线按斜率排序.然后从前往后处理边. 当中维护一个栈.如果当前线和栈顶的交点在栈顶和栈顶-1的交点左边.那么弹掉栈顶.. (可以 ...
- 天池 在线编程 卡牌游戏(01背包)
文章目录 1. 题目 2. 解题 1. 题目 你跟你的朋友在玩一个卡牌游戏,总共有 n 张牌. 每张牌的成本为 cost[i] 并且可以对对手造成 damage[i] 的伤害. 你总共有 totalM ...
- 动漫品牌“爆笑虫子”宣布与xNFT Protocol战略合作,开发NFT数字卡牌游戏
2021年4月23日,xNFT Protocol与动漫品牌"爆笑虫子"进行战略合作,推动"爆笑虫子"在卡牌游戏领域进行数字化转型.IP的数字(NFT)化是xNF ...
最新文章
- 三维重建【一】——————(深度学习方式)
- (25)2-9-9-12分页(下)
- 使用cl_htmlb_manager获得用户输入
- C#之app.config、exe.config和vshost.exe.config作用区别
- ocp linux 基础要点
- 算法题3 二分查找法
- 计算机应用基础 access,计算机应用基础第7章数据库应用基础Access
- 一加代言人小罗伯特唐尼竟用华为P30 Pro发微博,当然是笑着原谅他
- 基于element ui的收起展开检索条件效果
- c语言控制安卓桌面,让你自己编写的Android的Launcher成为系统中第一个启动应用程序,也是唯一的Launcher...
- mongodb update操作
- oracle symonym_Oracle 创建synonym 同义词详解
- windows命令查找程序_如何在Windows 10上查找和设置屏幕保护程序
- 【Day 6 of Learning Python 】修改、添加和删除列表元素
- 在html中加入网址,网页超链接怎么做,添加超链接网址的的详细步骤
- message: Content type 'multipart/form-data;boundary=----WebKitFormBoundaryksbSBUwTCB6eHI3j;charse
- 致敬!向中外9名杰出女数学家
- Oracle中 to_date()函数用法详解
- 技术栈中的爱马仕?Facebook发布全新JavaScript引擎:Hermes
- shell统计网卡流量