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. P1338 末日的传说 逆序数对

    题目描述 只要是参加jsoi活动的同学一定都听说过Hanoi塔的传说:三根柱子上的金片每天被移动一次,当所有的金片都被移完之后,世界末日也就随之降临了. 在古老东方的幻想乡,人们都采用一种奇特的方式记 ...

  2. 中国剩余定理算法详解 + POJ 1006 Biorhythms 生理周期

    转载请注明出处:http://exp-blog.com/2018/06/24/pid-1054/ #include <iostream> #include <cstdio> u ...

  3. Aizu:2170-Marked Ancestor

    Marked Ancestor Time limit 8000 ms Memory limit 131072 kB Problem Description You are given a tree T ...

  4. poj 1759 二分搜索

    题意:N个等差数列,初项X_i,末项Y_i,公差Z_i,求出现奇数次的数? 思路: 因为只有一个数出现的次数为奇数个 假设 第二个数字的个数为 奇数个,其余全部都是偶数个 ,累计出现的次数 a1偶数 ...

  5. SDK location not found. Define location with sdk.dir in the local.properties file or with an ANDROID

    如题: SDK location not found. Define location with sdk.dir in the local.properties file or with an AND ...

  6. ListView.getChildCount() 详解

    ListView.getCount() 返回的所包含的item总个数 ListView.getChildCount() (ViewGroup.getChildCount()) 返回的是现实层面上所包含 ...

  7. gettid 和pthread_self的区别

    转: Linux中,每个进程有一个pid,类型pid_t,由getpid()取得.Linux下的POSIX线程也有一个id,类型 pthread_t,由pthread_self()取得,该id由线程库 ...

  8. 远程 RADIUS 服务器组

    远程 RADIUS 服务器组 远程 RADIUS 服务器组是包含一个或多个 RADIUS 服务器的已命名的组.IAS 用作 RADIUS 请求消息的 RADIUS 代理时,必须指定远程 RADIUS ...

  9. Django笔记 —— 入门简介

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  10. Python 3基础教程8--if else、if elif else

    本文介绍if else语句,不多说,直接看例子. if elif else语句