Codeforces 859D - Third Month Insanity
题意
有 \(2^n\) 个人要进行比赛,每次 \(2i\) 与 \(2i+1\) 号人进行比赛(\(i\in [0,2^{n-1})\) )。这一轮中赢的人进入下一轮。下一轮比赛的时候把进入这一轮的人按编号排好,仍然是像之前那样相邻的进行一次比赛。最后只剩下一个人。
数据给出对于 \(x,y\) ,\(x\) 打赢 \(y\) 的概率。
第 \(i\) 轮比赛会角逐出 \(2^{n-i}\) 个赢家。我们要在比赛开始前,猜每轮的赢家(一轮的赢家一定要是上一轮的赢家)。第 \(i\) 轮每猜中一个赢家就会得到 \(2^{i-1}\) 的得分。
求最大的期望得分。
\(n\le 6\) 。
分析
只有猜到了与最终赢家相关的人才可能有得分。
轮数编号为 \([0,n)\) 。
设 \(f[i][x]\) 为 \(x\) 在第 \(i\) 轮胜利,只统计与 \(x\) 有关的人(递归地定义,与 \(x\) 比赛过的人以及与他们有关的人)的猜测的得分。
这是容易转移的。设 \(o(i,x)\) 表示可能在第 \(i\) 轮与 \(x\) 比赛的人的集合,那么
\]
其中 \(p[i][x]\) 表示 \(x\) 在第 \(i\) 轮胜利的概率。 其实就是 \(x\) 一定要赢,看预测哪个对手得分比较高。
\(p[i][x]\) 也是容易得到的
\]
\(w[x][v]\) 为 \(x\) 打败 \(v\) 的概率。
代码
#include<bits/stdc++.h>
using namespace std;
inline char nchar() {
static const int bufl=1<<20;
static char buf[bufl],*a=NULL,*b=NULL;
return a==b && (b=(a=buf)+fread(buf,1,bufl,stdin),a==b)?EOF:*a++;
}
inline int read() {
int x=0,f=1;
char c=nchar();
for (;!isdigit(c);c=nchar()) if (c=='-') f=-1;
for (;isdigit(c);c=nchar()) x=x*10+c-'0';
return x*f;
}
template<typename T> inline void Max(T &x,T y) {if (y>x) x=y;}
const int maxn=6;
const int maxs=1<<maxn;
double a[maxs][maxs],p[maxn][maxs],f[maxn][maxs];
int n,s,bin[maxs];
vector<int> o[maxs][maxn];
int main() {
#ifndef ONLINE_JUDGE
freopen("test.in","r",stdin);
#endif
for (int i=2;i<maxs;++i) bin[i]=bin[i>>1]+1;
n=read(),s=1<<n;
for (int i=0;i<s;++i) for (int j=0;j<s;++j) {
a[i][j]=read()/100.;
if (i!=j) o[i][bin[i^j]].push_back(j);
}
for (int i=0;i<s;++i) f[0][i]=p[0][i]=a[i][o[i][0][0]];
for (int i=1;i<n;++i) for (int j=0;j<s;++j) {
double &r=p[i][j]=0;
for (int x:o[j][i]) r+=p[i-1][x]*a[j][x];
r*=p[i-1][j];
}
for (int i=1;i<n;++i) for (int j=0;j<s;++j) {
double &r=f[i][j]=0;
for (int x:o[j][i]) Max(r,f[i-1][x]);
r+=f[i-1][j]+p[i][j]*(1<<i);
}
double ans=*max_element(f[n-1],f[n-1]+s);
printf("%.12lf\n",ans);
return 0;
}
Codeforces 859D - Third Month Insanity的更多相关文章
- 【CF MEMSQL 3.0 D. Third Month Insanity】
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
- codeforces 724
题目链接: http://codeforces.com/contest/724 A. Checking the Calendar time limit per test 1 second memory ...
- [codeforces 260]B. Ancient Prophesy
[codeforces 260]B. Ancient Prophesy 试题描述 A recently found Ancient Prophesy is believed to contain th ...
- Codeforces Good Bye 2015 A. New Year and Days 水题
A. New Year and Days 题目连接: http://www.codeforces.com/contest/611/problem/A Description Today is Wedn ...
- Codeforces 631C. Report 模拟
C. Report time limit per test:2 seconds memory limit per test:256 megabytes input:standard input out ...
- Codeforces Round #344 (Div. 2) C. Report 其他
C. Report 题目连接: http://www.codeforces.com/contest/631/problem/C Description Each month Blake gets th ...
- codeforces B. Calendar 解题报告
题目链接:http://codeforces.com/problemset/problem/304/B 题目意思:给出两个日期,需要算出这两个日期之间有多少日. 细心模拟就可以了.特别要注意的是,两个 ...
- Codeforces Round 363 Div. 1 (A,B,C,D,E,F)
Codeforces Round 363 Div. 1 题目链接:## 点击打开链接 A. Vacations (1s, 256MB) 题目大意:给定连续 \(n\) 天,每天为如下四种状态之一: 不 ...
- 【codeforces 760A】Petr and a calendar
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
随机推荐
- JAVA 第一周学习总结
20175308 2018-2019-2 <Java程序设计>第一周学习总结 教材学习内容总结 1.关于java 2.java开发环境的配置 3.java编译.运行的简单实例 4.git的 ...
- Vue复选框的全选
<!DOCTYPE html><html> <head> <meta charset="utf-8"> ...
- Failed to fetch URL https://dl-ssl.google.com/android/repository/addons_list-2.xml
解决方法来源:http://www.cnblogs.com/kaka-bing/archive/2012/10/31/2747490.html 问题描述: 使用Android SDK Manager检 ...
- day71
上节回顾:(模板层) 1 模板之变量---{{ }} -支持数字,字符串,布尔类型,列表,字典---相当于对它进行了打印 -函数--->相当于加括号运行(不能传参数) -对象---& ...
- ccf201703-1分蛋糕
问题描述 小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为a1, a2, …, an.小明想分给每个朋友至少重量为k的蛋糕.小明的朋友们已经排好队准备领蛋糕,对于每个朋 ...
- python with原理
在python2.5+中可以用with来保证关闭打开的文件 with open('hello.txt') as f: do some file operations 为什么要引入with呢? 在之前如 ...
- Android设备管理器漏洞(转)
一.漏洞描述 目前被称为“史上最强Android木马”的病毒Backdoor.AndroidOS.Obad.a利用Android设备管理器漏洞使用户无法通过正常方式卸载.其实该漏洞早在去年底已被发现. ...
- 20155202张旭 Exp4 恶意代码分析
20155202张旭 Exp4 恶意代码分析 实验前问题回答: 一:如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来 ...
- 20155204 王昊《网络对抗技术》EXP2 后门原理与实践
20155204 王昊<网络对抗技术>EXP2 后门原理与实践 一.实验内容 准备工作(试用ncat.socat) 1. 使用netcat获取主机操作Shell,cron启动. 明确目标: ...
- 20155206《网络对抗》Web安全基础实践
20155206<网络对抗>Web安全基础实践 实验后问题回答 (1)SQL注入攻击原理,如何防御 攻击原理:SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查 ...