Pong’s Birds

时间限制: 1 Sec  内存限制: 128 MB
提交: 98  解决: 24
[提交][状态][讨论版]

题目描述

In order to train his birds, Pong is holding a competition for them. (He have birds, does he?) He have 2n birds,
so he want to hold elimination series. Literally, if n = 2 and he has 4 birds identified as 1,2,3,4, he would first hold competition for 1 and 2, 3 and 4, the one fails would be eliminated and then he holds competition for the winners. 
According to his long observation, for each pair of birds he knows the probability to win for each bird, and he want to know the probability of each bird to be the final winner.

输入

For the first row there is an integer T(T ≤ 100), which is the number of test cases.
For each case , first row is an integer n(1 ≤ n ≤ 7), for the next 2n rows , each row has 2n real numbers as the probability to win for the i-th when competed to j-th bird. It is promised that for each i, j p[i][j] + p[j][i] = 1 and p[i][i] = 0;

输出

For each case you should output a line with 2n real numbers, which is the probability of i-th bird be the final winner. Rounded to 3 decimal places.
Make sure to output a space character after each number, to prevent the Presentation Error.

样例输入

1
1
0 0.5
0.5 0

样例输出

0.500 0.500

提示

2^n个鸟比赛,1和2,3和4...,然后每个赢的在和相邻的比,输的就被pass掉,然后求每个鸟成为winner的概率。

其实就是个模拟的过程,不过这里真正处理起来还是有点技巧和规律的。

这里有个奇偶互换的想法挺好的!!!

#include <bits/stdc++.h>
using namespace std;const int MAXN = (1 << 7) + 5;
double p[MAXN][MAXN];
double dp[8][MAXN];//dp[i][j]表示第i轮j队伍出线概率int main()
{int t;int n;int n2;int i, j, k;int grp;for (j = 0; j < MAXN; ++j) {dp[0][j] = 1;}scanf("%d", &t);while (t--) {scanf("%d", &n);n2 = 1 << n;for (i = 0; i < n2; ++i) {for (j = 0; j < n2; ++j) {scanf("%lf", &p[i][j]);}}for (i = 1; i <= n; ++i) {for (j = 0; j < n2; ++j) {grp = j / (1 << (i - 1));grp ^= 1;//奇偶互换dp[i][j] = 0;for (k = grp << (i - 1); k < ((grp + 1) << (i - 1)); ++k) {dp[i][j] += dp[i - 1][j] * dp[i - 1][k] * p[j][k];}}}for (i = 0; i < n2 - 1; ++i) {printf("%.3lf ", dp[n][i]);}printf("%.3lf\n", dp[n][n2 - 1]);}return 0;
}

Pong’s Birds(概率 模拟)相关推荐

  1. Java实现夺冠概率模拟

    足球比赛具有一定程度的偶然性,弱队也有战胜强队的可能. 假设有甲.乙.丙.丁四个球队.根据他们过去比赛的成绩,得出每个队与另一个队对阵时取胜的概率表: 甲 乙 丙 丁 甲 - 0.1 0.3 0.5 ...

  2. C语言 双色球 红蓝球出现概率模拟

    #include<stdio.h> #include<stdlib.h> #include<time.h> int main() {long a=0,b=0,c=0 ...

  3. python依照概率抽样_R语言之随机数与抽样模拟篇

    R语言生成均匀分布随机数的函数是runif() 句法是:runif(n,min=0,max=1)  n表示生成的随机数数量,min表示均匀分布的下限,max表示均匀分布的上限:若省略参数min.max ...

  4. Python中表示偶数_蒙特卡洛模拟(Python)深入教程

    译者:大表哥.wiige来源:AI研习社 什么是蒙特卡罗模拟? 蒙特卡罗方法是一种使用随机数和概率来解决复杂问题的技术.蒙特卡罗模拟或概率模拟是一种技术,用于了解金融部门.项目管理.成本和其他预测机器 ...

  5. python 蒙特卡罗_蒙特卡洛模拟(Python)深入教程

    原标题:蒙特卡洛模拟(Python)深入教程 字幕组双语原文:蒙特卡洛模拟(Python)深入教程 英语原文:Monte Carlo Simulation An In-depth Tutorial w ...

  6. R语言之随机数与抽样模拟篇

    转载自:http://blog.csdn.net/lilanfeng1991/article/details/18505723 3.1 随机数的产生 3.1.1 均匀分布随机数 R语言生成均匀分布随机 ...

  7. 近似概率编程文献综述

    近似概率编程文献综述 摘要:概率编程是一个新兴的编程范式,在概率编程的推理过程中,近似算法可以大大优化效率.概率编程中的近似算法主要有边界近似算法和模拟近似算法.边界近似算法通过计算查询为真的所有可能 ...

  8. 概率编程——未来也可以这样预测

    1814 年,皮埃尔•西蒙•拉普拉斯写道"在很大程度上,人生最重要的问题就是概率问题."然而漫长的概率理论研究却是一波三折,直到概率编程的出现使其取得了重要的进步. "明 ...

  9. c语言比率分布 函数 rate(m),R语言中统计分布和模拟_R语言培训

    R语言中统计分布和模拟 前言 很多应用都需要随机数.像interlink connection,密码系统.视频游戏.人工智能.优化.问题的初始条件,金融等都需要生成随机数.但实际上目前我们并没有&qu ...

  10. 概率性抽卡模拟器v2.0(GUI实现)

    图好玩也是为了检测自己最近所学内容,将以前的程序进行GUI实现 概率模拟部分 package XIangmu;import java.util.Random;public class He_Xin { ...

最新文章

  1. Activity向Fragment传值
  2. .net EF监控 MiniProfiler
  3. python pp 库实现并行计算
  4. SQLAlchemy简单操作
  5. C#调用C++类(以COM组件的形式)
  6. 利用SMS实现资产管理
  7. 微信小程序-仿淘宝(附真机测试图)(持续更新中。。。)
  8. Python学习笔记(2) Python提取《釜山行》人物关系
  9. Atitit vue绑定json列表数据到表格最小简化培训版本 目录 1.1. 引入类库jq与vue 1 1.2. 获取ajax数据并推送到vue的内部自定义变量 1 1.3. 建立表格与vue变量
  10. python opencv将图片转为灰度图
  11. CentOS7如何升级ruby版本
  12. SpringBoot海景房出租管理系统+代码讲解
  13. 信息收集——Google Hacking
  14. word2010加载MathType打开时显示“安全警告,宏已被禁用”解决办法
  15. 绝地求生 服务器无响应,绝地求生大逃杀点击游戏无反应进不去问题解决方法一览...
  16. 人工智能公司排名百度,持续更新~
  17. 【Vue源码解读】万行源码详细解读
  18. 暴雪在洛杉矶建了自己的电竞馆,守望先锋锦标赛下个月就会在这里举行
  19. python网校 哪个_学习Python有什么推荐的网课,书籍资料,以及该装哪个版本的Python?...
  20. UG NX 曲面设计方法和特点

热门文章

  1. 图神经网络(10)- knowledge graph(知识图谱)
  2. 本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列
  3. 游戏HTML翻翻乐,大班益智游戏翻翻乐优秀教案
  4. 1148环形石子合并
  5. Python可视化——随机漫步
  6. 如何使用AndriodStudio制作音乐播放器音乐列表界面和导入手机音乐资源
  7. 2019秋季10月新番动漫推荐
  8. 关于getdate()的不同的日期格式
  9. 浅谈工业互联网与产业互联网区别
  10. jt808终端鉴权_北斗终端设备通信协议(JT/T808)