试题编号: 201612-5
试题名称: 卡牌游戏
时间限制: 3.0s
内存限制: 256.0MB
问题描述:

问题描述
  小Q和小M是游戏数值策划师,他们最近在测试自己新设计的卡牌对战游戏。游戏总共有 n 张卡牌,用 1 到 n 的正整数编号。最开始小Q和小M各会拥有其中的一部分。
  每一局游戏,小Q和小M都需要从自己拥有的卡牌中选出一张进行对战,获胜的一方会获得双方选出的两张卡牌。游戏会一直进行下去,直到其中一个人获得了所有的卡牌,此时获得所有卡牌的一方赢得了最终的胜利。
  对于一对特定的卡牌 i 和 j,i 战胜 j 的概率为 Pi, j。此概率与其他事件独立,只与选出的这两张卡牌有关系;每次对战一定会决出胜负,因此有 Pi,j + Pj,i = 1。
  小Q和小M都没有好好学习博弈论,已经忘了混合决策那套理论。经过商量,他们采取了同一套看起来合理的选牌方式:
  1. 对于自己的卡牌 i,计算出这张卡牌能赢得对方每张卡牌的概率之和 Si=∑j是对方的卡牌Pi, j ;
  2. 令自己选出卡牌i的概率正比于Si,即选出i的概率为 Si/∑k是自己的卡牌Sk。
  小M想知道,对于给出的 m 种初始状态,他最终获胜的概率是多少。
输入格式
  从标准输入读入数据。
  输入的第一行包含两个正整数 n, m 表示卡牌的数量和初始状态的数量。
  接下来 n-1 行。其中的第 i 行(1 ≤ i < n)包含 n - i 个恰好含有 2 位小数的浮点数;该行的第 j 个(1 ≤ j ≤ n - i)数表示 Pi, i+j。
  保证上述每个 Pi,j 均是直接调用伪随机数生成函数生成一个 [10, 90] 上的整数,然后除以 100 得到;即可以认为每个数都是从 [0.10, 0.90] 上的所有 2 位小数中,独立等概率取得的。
  接下来 m 行,每行包含 n 个 0 或 1 的整数,描述一个初始状态。这 n 个数中的第 i 个如果是 1 表示第 i 张牌最初在小M手中,否则表示这张牌在小Q手中。
  保证询问两两不同。
输出格式
  输出到标准输出。
  输出 m 行,每行输出一个小数部分长度恰好为5的浮点数,表示小M的每种初始状况最终获胜的概率四舍五入后的结果。
  你答案中的每个数必须和参考答案完全一样才能获得相应测试点的分数。
  保证参考答案与真实答案的差值不超过 4 × 10-6
样例输入
3 4
0.46 0.21
0.86
0 0 0
1 1 0
0 0 1
1 1 1
样例输出
0.00000
0.83488
0.16512
1.00000
样例说明

局面编号 小M的牌 小Q的牌 S1 S2 S3 小M的Si 之和 小Q的Si 之和
x1 1 2,3 0.67 0.54 0.79 0.67 1.33
x1 1 2,3 0.67 0.54 0.79 0.67 1.33
x2 2 1,3 0.46 1.40 0.14 1.40 0.60
x3 3 1,2 0.21 0.86 0.93 0.93 1.07

我们设 P (x) 为当前局面为 x,最终小M获胜的概率,例如 P (x1) 表示小M手里的牌为 1 最终获胜的概率。
  定义事件 ^x 为将局面 x 中双方手里的牌互换的局面,根据对称性易得 P( ^x)=1 - P (x)。
  对于全部牌都在小M手里的情况,小M已经赢得了胜利,此种情况下小M获胜概率为 1;相反,牌全部在小Q手里的话,小M获胜概率为 0。
  对于局面 x1:小M由于只有一张牌 1,因此他必须出这张牌;小Q根据之前的选牌策略,他有 0.54/1.33 的概率出 2,有 0.79/1.33 的概率出 3。若小Q出 2:则小M有 0.46 的概率会赢得这张牌,从而进入局面 ^x3;有 1-0.46 的概率会输掉手中最后一张 1。若小Q出 3:则小M有 0.21 的概率会赢得这张牌,从而进入局面 ^x2;有 1-0.21 的概率会输掉最后一张 1。因此,可以得出
p(x1)=0.541.33[0.46P(∧x3)+(1−0.46)×0]+0.791.33[0.21P(∧x2)+(1−0.21)×0]p(x_1)=\frac{0.54}{1.33}[0.46P(∧x_3)+(1-0.46)×0]+\frac{0.79}{1.33}[0.21P(∧x_2)+(1-0.21)×0]p(x1​)=1.330.54​[0.46P(∧x3​)+(1−0.46)×0]+1.330.79​[0.21P(∧x2​)+(1−0.21)×0]
=0.54×0.461.33[1−P(x3)]+0.79×0.211.33[1−P(x2)]=\frac{0.54×0.46}{1.33}[1-P(x_3)]+\frac{0.79×0.21}{1.33}[1-P(x_2)]=1.330.54×0.46​[1−P(x3​)]+1.330.79×0.21​[1−P(x2​)]
=11.33[0.4143−0.2484P(x3)−0.1659P(x2)]=\frac{1}{1.33}[0.4143-0.2484P(x_3)-0.1659P(x_2)]=1.331​[0.4143−0.2484P(x3​)−0.1659P(x2​)]

同理,可以求出 P (x2) 和 P (x3) 的表达式:
P(x2)=10.60[0.3688−0.1204P(x1)−0.2484P(x3)]P(x_2)=\frac{1}{0.60}[0.3688-0.1204P(x_1)-0.2484P(x_3)]P(x2​)=0.601​[0.3688−0.1204P(x1​)−0.2484P(x3​)]
P(x3)=11.07[0.2863−0.1659P(x2)−0.1204P(x1)]P(x_3)=\frac{1}{1.07}[0.2863-0.1659P(x_2)-0.1204P(x_1)]P(x3​)=1.071​[0.2863−0.1659P(x2​)−0.1204P(x1​)]

注意到 0.2484/1.33, 0.1204/0.60 等数均小于 1,我们可以将三个式子互相不断代入各自的等式右边,得到一个收敛的级数。对这个级数求和就能求出样例的答案。
样例输入
2 4
0.34
0 0
1 0
0 1
1 1
样例输出
0.00000
0.34000
0.66000
1.00000
样例输入
4 8
0.81 0.34 0.73
0.85 0.50
0.22
0 0 0 0
1 0 1 0
0 1 1 0
1 1 1 0
0 0 0 1
1 0 0 1
0 1 0 1
1 1 1 1
样例输出
0.00000
0.61095
0.38546
0.80232
0.19768
0.61454
0.38905
1.00000
样例输入
5 20
0.45 0.28 0.48 0.59
0.61 0.88 0.66
0.19 0.67
0.11
0 0 0 0 0
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
1 0 1 0 0
1 0 0 1 0
1 1 0 1 0
0 0 1 1 0
1 0 1 1 0
1 1 1 1 0
0 0 0 0 1
0 1 0 0 1
1 1 0 0 1
0 0 1 0 1
0 1 1 0 1
0 1 0 1 1
1 1 0 1 1
1 0 1 1 1
0 1 1 1 1
1 1 1 1 1
样例输出
0.00000
0.15693
0.30992
0.16074
0.35568
0.28030
0.63788
0.31579
0.52478
0.85575
0.14425
0.47522
0.68421
0.36212
0.71970
0.64432
0.83926
0.69008
0.84307
1.00000
评测用例规模与约定
  总共 20 组评测数据。对于第 i 组数据(1 ≤ i ≤ 20):若 i ≤ 10,n=⌈i / 2⌉;若 i > 10,n = i-5。

问题链接:CCF201612-5 卡牌游戏
问题简述:(略)
问题分析:参考链接是75分,募集解题代码。
程序说明:(略)
参考链接
[ACM]CCF CSP [201612-5]E题 卡牌游戏【75分的程序】
题记:(略)

100分的C++语言程序如下:

CCF201612-5 卡牌游戏(募集解题代码)相关推荐

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

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

  2. java卡牌游戏详解

    代码如下: package zxc;//文件夹名称 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.even ...

  3. 卡牌游戏战斗系统的设计和实现二

    卡牌游戏战斗系统的设计和实现二 http://www.lxway.com/4418844614.htm 在一篇文章中,我更多的是从游戏理论的角度,讨论了战斗的系统的设计.这篇文章中,我将从程序的角度, ...

  4. 卡牌游戏源代码(原创)(控制台)

    游戏预览: 完成度90%,约3000行,过年这几天全用在这上面了 由于尚未学到QT等,因此只能在黑窗口下面制作了 未完成的部分: ①战斗代码未优化(800行,精简后应该能降到200行左右) ②关卡掉落 ...

  5. H - 卡牌游戏(简单期望)

    Description 小贝喜欢玩卡牌游戏.某个游戏体系中共有N种卡牌,其中M种是稀有的.小贝每次和电脑对决获胜之后都会有一个抽卡机会,这时系统会随机从N种卡中选择一张给小贝.普通卡可能多次出现,而稀 ...

  6. php写卡牌游戏,生成汉字卡牌的PHP小应用

    上初中时,班里曾经有人发明了一套用化学元素信息做卡牌的游戏,风靡一时.可惜现在已经完全想不起来当时的玩法了.包子上小学后,包爸就想着也效仿这种模式,让包子和小伙伴们有的玩.于是断断续续花了一个学期的时 ...

  7. 用js写卡牌游戏(一)

    用js写卡牌游戏(一) 不想看废话的点这 直接看代码的点这 废话(前言) 现在游戏多了,不过总是感觉不太对自己的口味,每个游戏都感觉和自己想象中的要差了那么一点点,所以我决定尝试着自己写一个游戏. 因 ...

  8. EUI卡牌游戏的制作全过程

    转载自:https://bbs.egret.com/forum.php?mod=viewthread&tid=50009&highlight=%E5%8D%A1%E7%89%8C 为了 ...

  9. 6招深入进行 Cocos 卡牌游戏优化!《新斗罗大陆》研发团队经验分享

    引言:不久前在 Cocos Star Meetings 上海站,OMNIDREAM GAMES 的前端主程铁树,分享了团队一款在研卡牌游戏的优化方案.本文为分享实录.( PS. 公众号后台回复关键字[ ...

最新文章

  1. tf.stack与tf.unstack
  2. 释放linux 内存
  3. 为什么Redis是单线程?为什么能处理大并发量?(举例不错)
  4. java——什么是浅表副本
  5. CodeForces 362B Petya and Staircases
  6. 小米手环nfc门卡摸拟成功后不能开门_一键开门,7种解锁方式,绿米推出全自动智能锁...
  7. 解决shiro和quartz2 版本冲突问题
  8. mysql不能插入中文
  9. rockemq 发送延迟消息_58分布式消息队列WMB设计与实践
  10. 23种设计模式(六)单一职责之桥模式
  11. 细数国内外的哪些数学建模竞赛
  12. 中文拼音排序(web前端实现)
  13. ipa文件安装到ios系统
  14. [975]python requests实现HTTPS客户端的证书导入
  15. CMP SUB 区别
  16. android记账本的技术路线,Android — 个人简洁记账本项目开发日志
  17. android视频动态壁纸app,手机壁纸视频动态壁纸
  18. php支付宝聚合支付源码,ThinkPHP5.1聚合支付源码
  19. android版本内存卡,都8GB内存了 为何安卓手机还是这么卡?
  20. java 凸包,确定凸包上的点—Graham扫描法—java实现

热门文章

  1. 【Vegas2006】8月24日-花豆擀面做法
  2. 现实给了梦想多少时间?
  3. mysql 1690_mysql error BIGINT UNSIGNED value is out of range in 解决办法
  4. 使用Python在ArcGIS中编程杂谈
  5. 用计算机弹假面骑士build,假面骑士build中只有资深粉丝才知道的梗第一弹
  6. python怎么把变量付给数组_使用Python将数组的元素导出到变量中(unpacking)
  7. showdialog url访问页面_静态url在搜索引擎优化中的重要作用
  8. pythonjs设置_在节点js中设置env变量并在python脚本中使用
  9. 【java学习之路】(java框架)010.声明式事务控制
  10. 鬼点灯服务器找不到了怎么办,Minecraft地图被毁或是找不到了怎么办?手把手教你找回它!...