题目描述

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]卡牌游戏相关推荐

  1. (概率/dp)P2059 [JLOI2013]卡牌游戏

    https://www.luogu.org/problemnew/show/P2059 第一次做概率dp的题,还以为要用组合数学知识去推公式 上次牛客也遇到概率dp的题,就忘了补题 考虑从1个人正推到 ...

  2. [luogu2059 JLOI2013] 卡牌游戏 (概率dp)

    [luogu2059 JLOI2013] 卡牌游戏 (概率dp) 题目描述 N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等 ...

  3. [BZOJ] 3191 [JLOI2013]卡牌游戏

    Time Limit: 10 Sec Memory Limit: 128 MB Submit: 725 Solved: 487 [Submit][Status][Discuss] Descriptio ...

  4. 【BZOJ 3191】[JLOI2013]卡牌游戏

    注意 最后一个没有空格!!!!! 题解(摘自网络) 有一个很重要的性质:当前人获胜的概率只与其在排列中与庄家的相对位置和人数有关..跟具体有哪些人无关.. 那么我们可以用f[i][j]表示还有i人时从 ...

  5. 【概率DP】$P2059$ 卡牌游戏

    [概率DP]P2059 卡牌游戏 链接 题目描述 N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张 ...

  6. 牛客--卡牌游戏 (概率DP 逆推) P2059

    题目链接:卡牌游戏 n个人,m张卡牌上有m个数字.庄家随机一张卡牌,数字为X,第X位出局,随后第X位的下一位做庄家,问,每个人最后获胜的概率是多少? 约瑟夫环的变形问题,这里每次等概率的抽牌,数字相对 ...

  7. 【JLOI2013合集】BZOJ3090 赛车 BZOJ3091 卡牌游戏 BZOJ3092 删除物品 BZOJ3093 地形生成...

    赛车: 这个题就是水平可见直线.. 水平可见直线怎么做呢.. 就是把所有直线按斜率排序.然后从前往后处理边. 当中维护一个栈.如果当前线和栈顶的交点在栈顶和栈顶-1的交点左边.那么弹掉栈顶.. (可以 ...

  8. 天池 在线编程 卡牌游戏(01背包)

    文章目录 1. 题目 2. 解题 1. 题目 你跟你的朋友在玩一个卡牌游戏,总共有 n 张牌. 每张牌的成本为 cost[i] 并且可以对对手造成 damage[i] 的伤害. 你总共有 totalM ...

  9. 动漫品牌“爆笑虫子”宣布与xNFT Protocol战略合作,开发NFT数字卡牌游戏

    2021年4月23日,xNFT Protocol与动漫品牌"爆笑虫子"进行战略合作,推动"爆笑虫子"在卡牌游戏领域进行数字化转型.IP的数字(NFT)化是xNF ...

最新文章

  1. 三维重建【一】——————(深度学习方式)
  2. (25)2-9-9-12分页(下)
  3. 使用cl_htmlb_manager获得用户输入
  4. C#之app.config、exe.config和vshost.exe.config作用区别
  5. ocp linux 基础要点
  6. 算法题3 二分查找法
  7. 计算机应用基础 access,计算机应用基础第7章数据库应用基础Access
  8. 一加代言人小罗伯特唐尼竟用华为P30 Pro发微博,当然是笑着原谅他
  9. 基于element ui的收起展开检索条件效果
  10. c语言控制安卓桌面,让你自己编写的Android的Launcher成为系统中第一个启动应用程序,也是唯一的Launcher...
  11. mongodb update操作
  12. oracle symonym_Oracle 创建synonym 同义词详解
  13. windows命令查找程序_如何在Windows 10上查找和设置屏幕保护程序
  14. 【Day 6 of Learning Python 】修改、添加和删除列表元素
  15. 在html中加入网址,网页超链接怎么做,添加超链接网址的的详细步骤
  16. message: Content type 'multipart/form-data;boundary=----WebKitFormBoundaryksbSBUwTCB6eHI3j;charse
  17. 致敬!向中外9名杰出女数学家
  18. Oracle中 to_date()函数用法详解
  19. 技术栈中的爱马仕?Facebook发布全新JavaScript引擎:Hermes
  20. shell统计网卡流量

热门文章

  1. MySQL修改,表结构大幅修改
  2. 前端开发面试题收集(html部分)
  3. jquery 获得table 行数
  4. div中字垂直居中对齐
  5. 通示jQuery实例方法,未DOM对象添加多个方法
  6. 【JUnit】BeforeClass、AfterClass、Before与After示例
  7. IE自动弹出窗口(JS/TrojanDownloader.Iframe.NDR 木马查杀)故障解决
  8. Android 中动态的向布局中添加控件
  9. python 函数内部声明全局变量
  10. msp430入门编程46