【hdu 4696】Professor Tian
【Link】:http://acm.hdu.edu.cn/showproblem.php?pid=4649
【Description】
给你一个由位运算“与”“或”“和”组成的计算表达式;
每个运算符都有p[i]的几率消失;
问你最后这个计算表达式的值的期望是多少?
运算的数字< 220
【Solution】
因为二进制在进行位运算的时候,是不会产生进位的;
因此,我们可以一位一位地算;
即从二进制的第一位开始算,通过一个简单的DP,得到
这一位在n个数字做完之后为1的概率是多少;
然后乘上2^0即可;
对于第二位,第三位…用同样的方法做即可;
定义的状态为
f[i][j][k]表示第i位,在前j个数算完之后,为k的概率是多少,k=0或者1;
【NumberOf WA】
0
【Reviw】
二进制在计算的时候,不会产生进位->各个位的计算是独立的;
这里利用了一个独立的思想;
【Code】
#include <bits/stdc++.h>
using namespace std;
#define int long long
using namespace std;
const int M = 20;
const int N = 200;
double f[M+10][N+10][2],p[N+10],ans = 0;
int two[M+10],n,a[N+10];
char s[N+10][5];
main(){
//freopen("/home/ccy/rush.txt","r",stdin);
two[0] = 1;
for (int i = 1;i <= M;i++)
two[i] = two[i-1]*2;
int kk = 0;
while(~scanf("%lld",&n)){
ans = 0;
for (int i = 1;i <= n+1;i++)
scanf("%lld",&a[i]);
for (int i = 1;i <= n;i++)
scanf("%s",s[i]);
for (int i = 1;i <= n;i++)
scanf("%lf",&p[i]);
for (int i = 0;i <= M-1;i++){
int temp = two[i];
if (a[1]&temp)
f[i][1][1] = 1,f[i][1][0] = 0;
else
f[i][1][0] = 1,f[i][1][1] = 0;
for (int j = 1;j <= n;j++){
if (a[j+1]&temp){
if (s[j][0]=='&'){
f[i][j+1][1] = f[i][j][1];
f[i][j+1][0] = f[i][j][0];
}
if (s[j][0]=='|'){
f[i][j+1][1] = f[i][j][1] + f[i][j][0]*(1-p[j]);
f[i][j+1][0] = f[i][j][0]*p[j];
}
if (s[j][0]=='^'){
f[i][j+1][1] = f[i][j][0]*(1-p[j]) + f[i][j][1]*p[j];
f[i][j+1][0] = f[i][j][1]*(1-p[j]) + f[i][j][0]*p[j];
}
}else{
//(a[j+1]&temp)==0
//a[j+1] in i == 0
if (s[j][0]=='&'){
f[i][j+1][1] = f[i][j][1]*p[j];
f[i][j+1][0] = f[i][j][0] + f[i][j][1]*(1-p[j]);
}
if (s[j][0]=='|'){
f[i][j+1][1] = f[i][j][1];
f[i][j+1][0] = f[i][j][0];
}
if (s[j][0]=='^'){
f[i][j+1][1] = f[i][j][1];
f[i][j+1][0] = f[i][j][0];
}
}
}
ans = ans + 1.0*temp*f[i][n+1][1];
}
printf("Case %lld:\n%.6lf\n",++kk,ans);
}
return 0;
}
【hdu 4696】Professor Tian的更多相关文章
- 【数位dp】【HDU 3555】【HDU 2089】数位DP入门题
[HDU 3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #includ ...
- 【HDU 5647】DZY Loves Connecting(树DP)
pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS ...
- -【线性基】【BZOJ 2460】【BZOJ 2115】【HDU 3949】
[把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最 ...
- 【HDU 2196】 Computer(树的直径)
[HDU 2196] Computer(树的直径) 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 这题可以用树形DP解决,自然也可以用最直观的方法解 ...
- 【HDU 2196】 Computer (树形DP)
[HDU 2196] Computer 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 刘汝佳<算法竞赛入门经典>P282页留下了这个问题 ...
- 【HDU 5145】 NPY and girls(组合+莫队)
pid=5145">[HDU 5145] NPY and girls(组合+莫队) NPY and girls Time Limit: 8000/4000 MS (Java/Other ...
- 【hdu 1043】Eight
[题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=1043 [题意] 会给你很多组数据; 让你输出这组数据到目标状态的具体步骤; [题解] 从12345 ...
- 【HDU 3068】 最长回文
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3068 [算法] Manacher算法求最长回文子串 [代码] #include<bits/s ...
- 【HDU 4699】 Editor
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=4699 [算法] 维护两个栈,一个栈放光标之前的数,另外一个放光标之后的数 在维护栈的同时求最大前缀 ...
随机推荐
- NodeJS学习笔记 (12)网络地址解析-url(ok)
模块概述 nodejs中,提供了url这个非常实用的模块,用来做URL的解析.在做node服务端的开发时会经常用到.使用很简单,总共只有3个方法. 正式讲解前,各位同学先把下面这个图记在心上(来自no ...
- Java基础学习总结(27)——7 款开源 Java 反编译工具
今天我们要来分享一些关于Java的反编译工具,反编译听起来是一个非常高上大的技术词汇,通俗的说,反编译是一个对目标可执行程序进行逆向分析,从而得到原始代码的过程.尤其是像.NET.Java这样的运行在 ...
- MIBTree
NETWORK-APPLIANCE-MIB http://www.mibdepot.com/cgi-bin/getmib3.cgi?abc=0&n=NETWORK-APPLIANCE-MIB& ...
- 洛谷 P1454 圣诞夜的极光
P1454 圣诞夜的极光 题目背景 圣诞夜系列~~ 题目描述 圣诞老人回到了北极圣诞区,已经快到12点了.也就是说极光表演要开始了.这里的极光不是极地特有的自然极光景象.而是圣诞老人主持的人造极光. ...
- Codeforces 558C Amr and Chemistry 全都变相等
题意:给定一个数列,每次操作仅仅能将某个数乘以2或者除以2(向下取整). 求最小的操作次数使得全部的数都变为同样值. 比赛的时候最后没实现.唉.之后才A掉.開始一直在想二分次数,可是半天想不出怎 ...
- RenderScript on LLVM笔记
Android 为何引入 Render Script: 3D 可移植 ( 直接用 opengl 也能够移植呀?) 性能 易用性 ( 让 opengl 难入门的人,用 Render Script ?) ...
- Rapidjson的简单使用示例
很早就想用用Markdown了,一直没机会.今天就来试一下 先放个目录: Rapidjson的简单使用示例 rapidjson官方教程 本示例所用环境 示例代码与注释 rapidjson官方教程 如果 ...
- Spring MVC -- UEditor 编辑器整合入门
仅作为入门测试...... 下载UEditor资源 使用maven项目 <!-- 上传文件的支持 --> <dependency> <groupId>commons ...
- Callback<> and Bind()
Callback<> and Bind() Introduction The templated base::Callback<> class is a generalized ...
- 紫书 习题 10-17 UVa 11105 (筛法)
类似于素数筛的思想去做,不然暴力会超时而且还要判重 #include<cstdio> #include<cstring> #include<vector> #def ...