Professor Tian

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 870    Accepted Submission(s):
479

Problem Description
Timer took the Probability and Mathematical Statistics
course in the 2012, But his bad attendance angered Professor Tian who is in
charge of the course. Therefore, Professor Tian decided to let Timer face a hard
probability problem, and announced that if he fail to slove the problem there
would be no way for Timer to pass the final exam.
As a result , Timer
passed.
Now, you, the bad guy, also angered the Professor Tian when
September Ends. You have to faced the problem too. The problem comes that there
is an expression and you should calculate the excepted value of it. And the
operators it may contains are '&' (and),'|'(or) and '^'(xor) which are all
bit operators. For example: 7&3=3, 5&2=0, 2|5=7, 4|10=14, 6^5=3,
3^4=7.
Professor Tian declares that each operator Oi with its
coming number Ai+1 may disappear, and the probability that it happens
is Pi (0<i<=n).
 
Input
The input contains several test cases. For each test
case, there is a integer n (0<n<=200) in the first line.In the second
line, there are n+1 integers, stand for {Ai}. The next line contains
n operators ,stand for {Oi}. The forth line contains {Pi}.

Ai will be less than 220,
0<=Pi<=1.
 
Output
For each text case, you should print the number of text
case in the first line.Then output the excepted value of the expression, round
to 6 decimal places.
 
Sample Input
2
1 2 3
^ ^
0.1 0.2
2
8 9 10
^ ^
0.5 0.78
1
1 2
&
0.5
 
Sample Output
Case 1:
0.720000
Case 2:
4.940000
Case 3:
0.500000
 
Source
 
Recommend
zhuyuanchen520

题目大意

初始有一个数字A0, 然后给出A1,A2..An共n个数字,这n个数字每个数字分别有一个操作符,&,|,^

且每个数字出现的概率是pi

如果某个数字出现了,那么就和前面的数字用它的操作符进行位运算。

问最终的期望值是多少?

思路

这题官方题解说是反状态压缩,还是第一次做这种题。

知道了怎么表示状态这题就觉得不难做了,赛后1A。

题解官方的已经很详细了,不再累赘:

反状态压缩——把数据转换成20位的01来进行运算

因为只有20位,而且&,|,^都不会进位,那么一位一位地看,每一位不是0就是1,

这样求出每一位是1的概率,再乘以该位的十进制数,累加,就得到了总体的期望。

对于每一位,状态转移方程如下:

f[i][j]表示该位取前i个数,运算得到j(0或1)的概率是多少。

f[i][1]=f[i-1][1]*p[i]+根据不同运算符和第i位的值运算得到1的概率。

f[i][0]同理。

初始状态:f[0][0~1]=0或1(根据第一个数的该位来设置)

每一位为1的期望 f[n][1]

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<map>
using namespace std; typedef long long int64;
const int INF = 0x3f3f3f3f;
const int MAXN = ; int n, m;
double f[MAXN][];
int A[MAXN];
char O[MAXN];
double p[MAXN]; int main(){ char op[];
int cas = ;
while(~scanf("%d", &n)){ for(int i=; i<=n; ++i)
scanf("%d", &A[i]); for(int i=; i<=n; ++i){
scanf("%s", op);
O[i] = op[];
} for(int i=; i<=n; ++i)
scanf("%lf", &p[i]); for(int i=; i<; ++i)
f[][] = (A[i]>>i)&; double ans = ;
for(int i=; i<; ++i){
f[][] = (A[]>>i)&;
f[][] = !f[][]; for(int j=; j<=n; ++j){ // 第j个数字不出现,0和1的概率
f[j][] = f[j-][] * p[j];
f[j][] = f[j-][] * p[j]; // 加上出现第j个数字,0和1的概率
if(O[j] == '^'){
if( (A[j]>>i) & ){
f[j][] += f[j-][]*(-p[j]);
f[j][] += f[j-][]*(-p[j]);
} else{
f[j][] += f[j-][]*(-p[j]);
f[j][] += f[j-][]*(-p[j]);
} } else if(O[j] == '&'){
if( (A[j]>>i) & ){
f[j][] += f[j-][]*(-p[j]);
f[j][] += f[j-][]*(-p[j]);
} else{
f[j][] += (f[j-][] + f[j-][]) * (-p[j]);
// f[j][1]: 如果用了第j个数,这里不能出现1
}
} else if(O[j] == '|'){
if( (A[j]>>i) & ){
// f[j][0]: 不能出现这种情况
f[j][] += (f[j-][] + f[j-][]) * (-p[j]);
} else{
f[j][] += f[j-][] * (-p[j]);
f[j][] += f[j-][] * (-p[j]);
}
}
}
ans = ans + f[n][] * (<<i);
} printf("Case %d:\n%.6f\n", cas++, ans); }
return ;
}

HDU 4649 Professor Tian (概率DP)的更多相关文章

  1. HDU 4649 Professor Tian

    Professor Tian Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) T ...

  2. hdu 4649 Professor Tian 多校联合训练的题

    这题起初没读懂题意,悲剧啊,然后看了题解写完就AC了 题意是给一个N,然后给N+1个整数 接着给N个操作符(只有三种操作  即  或 ,与 ,和异或 |   &  ^ )这样依次把操作符插入整 ...

  3. hdu 4649 Professor Tian 反状态压缩+概率DP

    思路:反状态压缩——把数据转换成20位的01来进行运算 因为只有20位,而且&,|,^都不会进位,那么一位一位地看,每一位不是0就是1,这样求出每一位是1的概率,再乘以该位的十进制数,累加,就 ...

  4. HDU 4649 Professor Tian(概率DP)题解

    题意:一个表达式,n + 1个数,n个操作,每个操作Oi和数Ai+1对应,给出每个操作Oi和数Ai+1消失的概率,给出最后表达式值得期望.只有| , ^,&三个位操作 思路:显然位操作只对当前 ...

  5. HDU 4649 Professor Tian(反状态压缩dp,概率)

    本文出自   http://blog.csdn.net/shuangde800 题目链接:点击打开链接 题目大意 初始有一个数字A0, 然后给出A1,A2..An共n个数字,这n个数字每个数字分别有一 ...

  6. HDU 4649 Professor Tian(DP)

    题目链接 暴力水过的,比赛的时候T了两次,优化一下初始化,终于水过了. #include <cstdio> #include <cstring> #include <st ...

  7. HDU 4649 - Professor Tian(2013MUTC5-1007)(概率)

    不知道这题算作什么类型的题目,反正很巧妙,队友小杰想了没一会就搞定了 为了学习这种方法,我也搞了搞,其实思路不难想,位运算嘛,只有0和1,而且该位的运算只影响该位,最多20位,一位一位地计算即可,只需 ...

  8. HDU-4694 Professor Tian 概率DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4649 题意:给一个位运算的表达式,每个运算符和其后的运算数有一定概率不计算,求最后表达式的期望. 因为 ...

  9. HDU 4089 Activation(概率DP)(转)

    11年北京现场赛的题目.概率DP. 公式化简起来比较困难....而且就算结果做出来了,没有考虑特殊情况照样会WA到死的.... 去参加区域赛一定要考虑到各种情况.   像概率dp,公式推出来就很容易写 ...

随机推荐

  1. 硬盘安装Windows Server 2008(解决系统盘符变成D盘)

    硬盘安装Windows 2008系统方法 操作系统最好用的无疑是server 2003,但是现在Server 2003支持的软件越来越少,很多是故意不支持Server 2003了, 像php5.5以上 ...

  2. [CodeChef]RIN(最小割)

    Description  有m门课可以在n个学期内学习,第i门课在第j个学期的收益是\(X_{i,j}\),一个学期可以学多门课,有的课之间有依赖关系,即必须先学a再学b,求最大收益.n,m<= ...

  3. Android Url相关工具 通用类UrlUtil

    1.整体分析 1.1.源代码查看,可以直接Copy. public class UrlUtil { public static boolean isUrlPrefix(String url) { re ...

  4. js双轴柱状图

    <!doctype html><html lang="en"><head> <script type="text/javascr ...

  5. CSS3---混合模式

    概念 CSS3混合模式(  CSS Blend Modes  )是CSS3新增的一个魔法特性,可以允许多个背景或多个元素进行混合,类似于Photoshop的图层混合模式 CSS3混合模式属性一览 ba ...

  6. Oracle exp,imp,expdp,impdp数据导入导出

    一.导出模式(三种模式)及命令格式 1. 全库模式 exp 用户名/密码@网络服务名 full=y file=路径\文件名.dmp log=路径\文件名.log 2. 用户模式(一般情况下采用此模式) ...

  7. Docker应用设计四大关键

    TechTarget中国原创] Docker已经垄断了容器技术.设计应用时注意考虑便携性能够帮助企业利用容器技术能提供的所有优势. 随着Docker应用和容器越来越流行,很多公司都开始将容器技术作为其 ...

  8. Python3.7在win10下安装PyAudio库以及实现音频的录制与播放

    Python3.7 无法安装pyaudio 度娘的结果基本都是这个,pip install pyaudio.....然而十有八九你的电脑不买账,会报错. 报错信息: running install r ...

  9. 洛谷P1003铺地毯(提高组)

    题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n. 现在将这些地毯按照编号从小到大的顺序平行于 ...

  10. vue 自定义过度组件用法

    HTML: <div id="example-1"> <button @click="show = !show"> Toggle ren ...