题面

题解

概率$dp$

设$f[i][j]$表示还剩$i$个人时,第$j$个人获胜的概率。

边界$f[1][1] = 1$

转移:

枚举庄家抽到的卡牌$k$,得到这一轮被淘汰的位置$c$。

可以知道,当$c < j$时,第$j$个人是新的环中的从新庄家数起的第$j-c$个人

当$c > j$时,第$j$个人是新的环中的第$i+j-c$个人。

$$ \therefore f[i][j] \text{+=} \begin{cases} f[i - 1][j - c] / m & (c < j) \\ 0 & (c = j) \\ f[i - 1][i - c + j] / m & (c > j) \end{cases} $$

代码

#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
#define RG register
#define file(x) freopen(#x".in", "r", stdin);freopen(#x".out", "w", stdout);
#define clear(x, y) memset(x, y, sizeof(x)) inline int read()
{
int data = 0, w = 1; char ch = getchar();
while(ch != '-' && (!isdigit(ch))) ch = getchar();
if(ch == '-') w = -1, ch = getchar();
while(isdigit(ch)) data = data * 10 + (ch ^ 48), ch = getchar();
return data * w;
} const int maxn(110);
double f[maxn][maxn];
int a[maxn], n, m; int main()
{
n = read(), m = read();
for(RG int i = 1; i <= m; i++) a[i] = read();
f[1][1] = 1.;
for(RG int i = 2; i <= n; i++)
for(RG int j = 1; j <= n; j++)
for(RG int k = 1; k <= m; k++)
{
int c = (a[k] % i) ? a[k] % i : i;
if(c < j) f[i][j] += f[i - 1][j - c] / m;
if(c > j) f[i][j] += f[i - 1][i - c + j] / m;
}
for(RG int i = 1; i <= n; i++) printf("%.2lf%% ", f[n][i] * 100.);
return 0;
}

【JLOI2013】卡牌游戏的更多相关文章

  1. BZOJ_3191_[JLOI2013]卡牌游戏_概率DP

    BZOJ_3191_[JLOI2013]卡牌游戏_概率DP Description   N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随 ...

  2. 洛谷 P2059 [JLOI2013]卡牌游戏 解题报告

    P2059 [JLOI2013]卡牌游戏 题意 有\(n\)个人玩约瑟夫游戏,有\(m\)张卡,每张卡上有一个正整数,每次庄家有放回的抽一张卡,干掉从庄家起顺时针的第\(k\)个人(计算庄家),干掉的 ...

  3. bzoj千题计划202:bzoj3191: [JLOI2013]卡牌游戏

    http://www.lydsy.com/JudgeOnline/problem.php?id=3191 每个人获胜的概率只与其在排列中与庄家的相对位置有关 dp[i][j] 还剩i个人时,从庄家数第 ...

  4. [JLOI2013]卡牌游戏 概率DP

    [JLOI2013]卡牌游戏 概率DP 题面 \(dfs\)复杂度爆炸,考虑DP.发现决策时,我们只用关心当前玩家是从庄家数第几个玩家与当前抽到的牌是啥.于是设计状态\(f[i][j]\)表示有\(i ...

  5. [JLOI2013]卡牌游戏

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

  6. bzoj 3191: [JLOI2013]卡牌游戏

    Description N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张卡片,假设卡片上的数字为X ...

  7. P2059 [JLOI2013]卡牌游戏

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

  8. 【bzoj3191】[JLOI2013]卡牌游戏 概率dp

    题目描述 n个人围成一圈玩游戏,一开始庄家是1.每次从m张卡片中随机选择1张,从庄家向下数个数为卡片上的数的人,踢出这个人,下一个人作为新的庄家.最后一个人获胜.问每个人获胜的概率. 输入 第一行包括 ...

  9. [bzoj3191][JLOI2013][卡牌游戏] (概率dp)

    Description   N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张卡片,假设卡片上的数字 ...

  10. 洛谷P2059 [JLOI2013]卡牌游戏

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

随机推荐

  1. SQL Server ->> 调用系统内建扩展存储过程"master.dbo.xp_delete_file"删除过期备份文件

    DECLARE @oldDate DATETIME SET @oldDate = GETDATE()-30 EXECUTE MASTER.dbo.xp_delete_file 0, N'D:\back ...

  2. springMVC入门-09

    这一节介绍SpringMVC对文件上传的支持,该功能支持需要使用到两个jar包:cmmons-fileupload-1.2.2.jar和commons-io-2.1.jar. 在controller类 ...

  3. 转:Eclipse+webservice开发实例

    原文地址:http://blog.csdn.net/xw13106209/article/details/7049614 1.参考文献: 1.利用Java编写简单的WebService实例  http ...

  4. Azure Cosmos DB 使用费用参考

    之前在学习Cosmos DB 中SQL API(DocumentDB) 的时候,也就是之前做的一些笔记,看到有使用费用的一些介绍,就有兴趣的去了解了下,做了一下简单的总结. 想了解更多或是购买使用的还 ...

  5. [UI] 精美UI界面欣赏[10]

    精美UI界面欣赏[10]

  6. 工作总结 [all]

    2. 工作总结 3. 面试经验 4. 其他

  7. windows 10最新版镜像资源下载 Win10 ISO下载教程

    最近发现原创写的文章被无良爬走,而且变成了无图尬文,所以开头附上原文地址: http://www.cnblogs.com/xueyudlut/p/7497975.html -------------- ...

  8. 加速安装 Sharepoint 2013 SP1

    第一次安装把人吓了一跳,居然花了5个半小时.想想有一大堆服务器要升级,不得不想想有什么加速的办法. 试了好几种方法,以下的办法最为简单 1:停止 IIS ADMIN,WWW 服务 2:停止所有 sha ...

  9. Uva1395 POJ3522 Slim Span (最小生成树)

    Description Given an undirected weighted graph G, you should find one of spanning trees specified as ...

  10. impala jdbc驱动执行impala sql的一个坑(不支持多行sql)

    架构使用spark streaming 消费kafka的数据,并通过impala来插入到kudu中,但是通过对比发现落地到kudu表中的数据比kafka消息数要少,通过后台日志发现,偶发性的出现jav ...