Knockout Tournament Gym - 101623K(概率)

2024-04-15 23:48

本文主要是介绍Knockout Tournament Gym - 101623K(概率),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题意:
n个人比赛,要求每一轮两两比赛,每次比赛一个人晋级,晋级概率为a/(a+b),a,b为两个人rating。
第一轮可以让一些人直接晋级,使得比赛树为完全二叉树,如图下。
在这里插入图片描述
求安排比赛方案使得第一个人最终获胜的概率最高。

思路:
除了第一个人直接按照rating排序,让第一个人尽量与rating小的人比赛,并且要求使得第一个人比赛场次尽可能少。之后就是一个模拟了。

这个模拟你可以递归模拟线段树建树过程,也可以直接补全最后一层成为完美二叉树然后再算出 f [ i ] [ j ] f[i][j] f[i][j],表示 i i i这个人晋级到第 j j j轮的概率。

//tdm
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#include <vector>
#include <iostream>
#include <string>
#include <cmath>using namespace std;typedef long long ll;const int maxn = 1e5 + 7;double f[33][maxn],a[maxn],b[maxn];int main() {int n;scanf("%d",&n);for(int i = 0;i < n;i++) scanf("%lf",&a[i]);int k = log2(n);int num = 1 << k;sort(a + 1,a + n);double flag = 1.0;if(num != n) {flag = 2.0;k++;num <<= 1;int cnt = 0;for(int i = 0;i < num - n;i++) {b[cnt++] = a[i];b[cnt++] = a[i];}for(int i = num - n;i < n;i++) {b[cnt++] = a[i];}for(int i = 0;i < num;i++) f[0][i] = 1.0;} else {for(int i = 0;i < num;i++) {f[0][i] = 1.0;b[i] = a[i];}}for(int i = 1;i <= k;i++) { //层次int len = 1 << i; // 长度for(int j = 0;j < num;j += len) { //起点for(int q = 0;q < len / 2;q++) { //左起点for(int p = len / 2;p < len;p++) { //右起点double p1 = b[j + q],p2 = b[j + p];f[i][j + q] += f[i - 1][j + p] * f[i - 1][j + q] * p1 / (p1 + p2);f[i][j + p] += f[i - 1][j + p] * f[i - 1][j + q] * p2 / (p1 + p2);}}}}printf("%.8f\n",f[k][0] * flag);return 0;
}

这篇关于Knockout Tournament Gym - 101623K(概率)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/907257

相关文章

hdu4865(概率DP)

题意:已知前一天和今天的天气概率,某天的天气概率和叶子的潮湿程度的概率,n天叶子的湿度,求n天最有可能的天气情况。 思路:概率DP,dp[i][j]表示第i天天气为j的概率,状态转移如下:dp[i][j] = max(dp[i][j, dp[i-1][k]*table2[k][j]*table1[j][col] )  代码如下: #include <stdio.h>#include

概率DP (由一道绿题引起的若干问题。目前为一些老题,蒟蒻的尝试学习1.0)

概率DP: 利用动态规划去解决 概率 期望 的题目。 概率DP 求概率(采用顺推) 从 初始状态推向结果,同一般的DP类似,只是经历了概率论知识的包装。 老题: 添加链接描述 题意: 袋子里有w只白鼠,b只黑鼠,A和B轮流从袋子里抓,谁先抓到白色谁就赢。A每次随机抓一只,B每次随机 抓完一只后 会有另外一只随机老鼠跑出来。如果两个人都没有抓到白色,那么B赢。A先抓,问A赢得概率。 w b 均在

2024国赛论文拿奖快对照这几点及评阅要点,勿踩雷区!(国赛最后冲刺,提高获奖概率)

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 2024“高教社杯”全国大学生数学建模竞赛已过去第三个夜晚,小伙伴们都累了没有,如果感到思维滞涩,别忘了稍作休息,放松一下自己,准备迎接国赛非常重要的收尾阶段——论文。 国赛这几天的努力最后都

Creating OpenAI Gym Environment from Map Data

题意:从地图数据创建 OpenAI Gym 环境 问题背景: I am just starting out with reinforcement learning and trying to create a custom environment with OpenAI gym. However, I am stumped with trying to create an enviro

HDU 4035 Maze (树状dp + 概率)

OJ题目 : click here ~~~ 题目分析 :这篇文章已经说的很好很好了 , 直接借用 ,猛戳~~ int n;double k[10002] , e[10002];double A[10002] , B[10002] , C[10002];vector<int> List[10002];bool dfs(int u , int father){if(List[u].s

前端自查【知识点】(高概率)2024最新版

HTML 如何理解 HTML 语义化 ? 仅通过标签便能判断内容的类型,特别是区分标题、段落、图片和表格 增加代码可读性(让人更容易读懂)对SEO更加友好 (让搜索引擎更容易读懂) HTML有哪些内联元素和块状元素 ? 内联元素 宽度由内容决定 display :inline 若非替换元素,不能设置宽高 img,span , a 等 display :inline-bl

【校招面经】统计与概率基础 part2

十六、对偶问题 线性规划有一个有趣的特性,就是任何一个求极大的问题都有一个与其匹配的求极小的线性规划问题。 例;原问题为 MAX X=8*Z1+10*Z2+2*Z3 s.t. 2*Z1+1*Z2+3*Z3 〈=70 4*Z1+2*Z2+2*Z3 〈=80 3*Z1+ 1*Z3 〈=15 2*Z1+2*Z2 〈=50 Z1,Z2,Z3 〉=0 Z则其对偶问题为 MIN =70*Y

【HDU】 4089 Activation 概率DP

题目大意:Tomato要玩一个游戏,他需要排队,一开始这个队列共有N个人,而他在队列的第M个位置,每当有玩家尝试激活登陆游戏时, 会概率性触发四个事件。p1的概率注册失败,队列无变化。p2的概率连接失败,排在队首的人排到队尾。p3的概率成功,队首出队。p4的概率服务器 瘫痪,停止激活!这时候如果排在Tomato前面的人不足K个,那么他会很气愤。问 : Tomato排在第k位以内服务器瘫痪的概率。

【codeforces】gym 101137 K - Knights of the Old Republic【用最小生成树对图做集合dp】

题目链接:【codeforces】gym 101137 K - Knights of the Old Republic 考虑对图集合dp,一个连通块的dp值为两个连通块的值的和或者强制加一条新边后的最小值,取个最小值(边从小到大枚举,则强制加一条最大的边会导致连通块内较小的边一定都选,则会构成一个生成树)。用kruskal实现这个dp过程即可。 #include <bits/stdc++.h>

【codeforces】gym 101138 K. The World of Trains【前缀和优化dp】

题目链接:K. The World of Trains 记录一个横着的前缀dp和以及斜着的前缀dp,复杂度 O(n2) O(n^2) #include <bits/stdc++.h>using namespace std ;typedef pair < int , int > pii ;typedef long long LL ;#define clr( a , x ) memset (