3150: [Ctsc2013]猴子

Time Limit: 20 Sec  Memory Limit: 256 MBSec  Special Judge
Submit: 163  Solved: 105
[Submit][Status][Discuss]

Description

小Q和小M最近发明了一种卡牌游戏,叫猴子大战。游戏最初小Q和小M各会取得一部分猴子牌。每局游戏,他们两个
需要分别等概率地从自己的猴子牌中抽取一张进行战斗。获胜的一方将获得双方的猴子牌。如果一方获得了所有的
猴子牌,则该方获得整场游戏的胜利。否则游戏将一直进行下去。 在进行了若干场比赛以后,小Q和小M算出了一
张胜率表,为每张猴子牌之间进行战斗双方获胜的概率。由于每场战斗一定会决出胜负,而且胜率不受先后顺序的
影响,因此对于任意的两张猴子牌A和B,A战胜B的概率加B战胜A的概率为1。 由于自己老是输给小M,小Q开始怀疑
自己每次拿到的猴子牌是否能获得胜利。他希望求出自己拿到的每种猴子牌组合的获胜的概率。 由于小Q接下来还
有在CD市体育中心数以万计的运动计划,因此这个问题只能交给你来解决了。

Input

输入的第一行包含两个正整数n和m,表示猴子牌的总张数和需要求的猴子牌组合的个数。 
接下来有n行,每行包含n个实数,每个实数保留了两位小数。
这n行中,其中第i行第j列的数为Pi,j,表示第i张猴子牌战胜第j张猴子牌的概率。
保证Pi,j + Pj,i  =  1。特别地,Pi,j = 0.5,没有特殊意义。 最后又m行。
每行包含一个长度为n的无空格分隔的01串,表示一个猴子牌的组合。
其中第i个字符如果为0,表示最初第i张牌在小M处,否则表示在小Q处。

Output

输出m行,每行一个实数,四舍五入保留八位小数(请强制输出八位浮点数),
一次表示每个给定的猴子牌组合下小Q获胜的概率。

Sample Input

3 4
0.50 0.60 0.40
0.40 0.50 0.70
0.60 0.30 0.50
110
011
111
000

Sample Output

0.71304348
0.66086957
1.00000000
0.00000000

HINT

【评分方法】 
你的答案的每一行如果与我们给定的参考答案的差别均不超过2×10-6,则获得该测试点的得分,否则不得分。 
参考答案保证与真实值的差别不超过10-8,因此如果你输出的答案保证与真实值差别不超过2×10^-6 — 2×10^-8,才能保证正确。

Source

vfleaking提供spj

首先可以想到设f[S]表示手牌集合为S时的胜利期望。

这样显然是过不了的。

这时我们发现如果A∩B=ø则f[AυB]=f[A]+f[B]

因此我们可以设f[i]表示手牌为i的胜利期望。

运用高斯消元求解即可。

 #include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
double f[][],a[][];
int n,m;char s[];
int main() {
scanf("%d%d",&n,&m);
for(int i=;i<n;i++) {
a[i][i]=-n;
for(int j=;j<=n;j++) {
double tmp;scanf("%lf",&tmp);
if(i!=j) {
a[i][j]=tmp;a[i][i]+=tmp;
}
}
}
for(int i=;i<=n;i++) {
double tmp;scanf("%lf",&tmp);
a[n][i]=;
}
a[n][n+]=;
for(int i=;i<=n;i++) {
int tmp=i;
for(int j=i;j<=n;j++) {
if(fabs(a[j][i])>=1e-) {tmp=j;break;}
}
if(tmp!=i) swap(a[tmp],a[i]);
for(int j=i+;j<=n;j++) {
double chg=a[j][i]/a[i][i];
for(int k=i;k<=n;k++) {
a[j][k]-=a[i][k]*chg;
}
}
}
for(int i=n;i>=;i--) {
for(int j=i+;j<=n;j++) a[i][n+]-=a[i][j]*a[j][n+];
a[i][n+]/=a[i][i];
}
while(m--) {
scanf("%s",s+);double ans=;
for(int i=;i<=n;i++) {
if(s[i]=='') ans+=a[i][n+];
}
printf("%.8lf\n",ans);
}
}

[BZOJ3150][Ctsc2013]猴子 期望dp+高斯消元的更多相关文章

  1. BZOJ 3150 [Ctsc2013]猴子 ——期望DP 高斯消元

    一堆牌的期望等于每张牌的期望值和. 考虑三个人的游戏即可得到. 然后每张牌遇到另外一张的概率相同,然后就可以列方程求解了. #include <cmath> #include <cs ...

  2. BZOJ_3143_[Hnoi2013]游走_期望DP+高斯消元

    BZOJ_3143_[Hnoi2013]游走_期望DP+高斯消元 题意: 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机 ...

  3. HDU 2262 Where is the canteen 期望dp+高斯消元

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2262 Where is the canteen Time Limit: 10000/5000 MS ...

  4. hdu4418 Time travel 【期望dp + 高斯消元】

    题目链接 BZOJ4418 题解 题意:从一个序列上某一点开始沿一个方向走,走到头返回,每次走的步长各有概率,问走到一点的期望步数,或者无解 我们先将序列倍长形成循环序列,\(n = (N - 1) ...

  5. 【noi2019集训题1】 脑部进食 期望dp+高斯消元

    题目大意:有n个点,m条有向边,每条边上有一个小写字母. 有一个人从1号点开始在这个图上随机游走,游走过程中他会按顺序记录下走过的边上的字符. 如果在某个时刻,他记录下的字符串中,存在一个子序列和S2 ...

  6. LightOJ 1151 Snakes and Ladders 期望dp+高斯消元

    题目传送门 题目大意:10*10的地图,不过可以直接看成1*100的,从1出发,要到达100,每次走的步数用一个大小为6的骰子决定.地图上有很多个通道 A可以直接到B,不过A和B大小不确定   而且 ...

  7. P4457-[BJOI2018]治疗之雨【期望dp,高斯消元】

    正题 题目链接:https://www.luogu.com.cn/problem/P4457 题目大意 开始一个人最大生命值为\(n\),剩余\(hp\)点生命,然后每个时刻如果生命值没有满那么有\( ...

  8. ZJUT 1423 地下迷宫(期望DP&高斯消元)

    地下迷宫 Time Limit:1000MS  Memory Limit:32768K Description: 由于山体滑坡,DK被困在了地下蜘蛛王国迷宫.为了抢在DH之前来到TFT,DK必须尽快走 ...

  9. Codeforces.24D.Broken robot(期望DP 高斯消元)

    题目链接 可能这儿的会更易懂一些(表示不想再多写了). 令\(f[i][j]\)表示从\((i,j)\)到达最后一行的期望步数.那么有\(f[n][j]=0\). 若\(m=1\),答案是\(2(n- ...

随机推荐

  1. 省选模拟赛 LYK loves graph(graph)

    题目描述 LYK喜欢花花绿绿的图片,有一天它得到了一张彩色图片,这张图片可以看做是一张n*m的网格图,每个格子都有一种颜色去染着,我们用-1至n*m-1来表示一个格子的颜色.特别地,-1代表这个颜色是 ...

  2. 配置ntpd时钟同步服务

    ntpd时钟同步服务 目录 参考: CentOS配置时间同步NTP: http://www.crsay.com/wiki/wiki.php/server/centos/ntp-set 解决ntp的错误 ...

  3. 「Python」人脸识别应用

    人脸识别主要步骤: face_recognition 库的安装 安装此库,首先需要安装编译dlib,此处我们偷个懒,安装软件Anaconda(大牛绕过),此软件预装了dlib. 安装好后,我们直接通过 ...

  4. python---Scrapy模块的使用(一)

    Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中. Scrapy 使用了 Twisted异步网络库来处理网络通讯.整体 ...

  5. Elasticsearch技术解析与实战(七)Elasticsearch partial update

    普通的partial update 1.插入测试数据 PUT /test_index/test_type/10 { "test_field1": "test1" ...

  6. 【BZOJ】2301: [HAOI2011]Problem b

    [题意]于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数.n,a,b,c,d,k<=50000. ...

  7. 线程池-Threadlocal

    ThreadLoclc初衷是线程并发时,解决变量共享问题,但是由于过度设计,比如弱引用的和哈希碰撞,导致理解难度大.使用成本高,反而成为故障高发点,容易出现内存泄露,脏数据.贡献对象更新等问题.单从T ...

  8. 一款已上市MMO手游地图同步方案总结

    1. 客户端地图格子的相关知识 在2.5D的MMO游戏里,角色是通过3D的方式渲染,2D的地图是通过2D的方式显示,所以在客户端一般会有三个坐标系: a) 3D坐标系:所有需要3D渲染的角色和光效,都 ...

  9. 使用Burpsuite爆破弱口令教工号

    使用Burpsuite爆破弱口令教工号 发表于 2015-11-18   |   分类于 Burpsuite  |   1条评论  |   26次阅读 准备 所谓工欲善其事,必先利其器,首先当然是要下 ...

  10. tf.reduce_sum()_tf.reduce_mean()_tf.reduce_max()

    根据官方文档: reduce_sum应该理解为压缩求和,用于降维 tf.reduce_sum(input_tensor,axis=None,keepdims=None,name=None,reduct ...