HDU 4649
来源:互联网 发布:apache ab 多个url 编辑:程序博客网 时间:2024/05/29 07:48
题目中有个很重要的条件 ,Ai will be less than 220,所以把每一个数转化成二进制来算不会超过20位
分别对每一位进行运算,算出每一位上最终结果为1 的概率,再乘上该位二进制对应的十进制数,得最终得到1的概率,即为期望
#include <iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<queue>#include<vector>#include<set>#include<map>#include<string>#define N 205using namespace std;char c[N];int num[N];double p[N];double P;double ans;int main(){ int n,i,j,icase=0; while(scanf("%d",&n)!=EOF) { icase++; ans=0; for(i=0;i<=n;i++) scanf("%d",&num[i]); getchar(); for(i=1;i<=n;i++) { scanf("%c",&c[i]); getchar(); } for(i=1;i<=n;i++) scanf("%lf",&p[i]); for(i=0;i<=20;i++) { if(num[0]&(1<<i)) //a[0]二进制的第i位上为1 P=1; // P为当前位等于1的概率 else P=0; for(j=1;j<=n;j++) //对每一个数的第i位进行处理 { if(num[j]&(1<<i)) { if(c[j]=='&') continue; else if(c[j]=='^') P=P*p[j]+(1-P)*(1-p[j]); //异或为1,之前为1&&异或运算不存在||之前为0,异或1 else P=P+(1-P)*(1-p[j]); } else { if(c[j]=='&') P=P*p[j]; else continue; } } // cout<<P<<endl; ans+=P*(1<<i); } printf("Case %d:\n",icase); printf("%.6lf\n",ans); } return 0;}
- HDU 4649
- hdu 4649 Professor Tian
- hdu 4649 Professor Tian
- HDU 4649 Professor Tian
- HDU 4649 Professor Tian
- HDU-4649 dp压缩
- hdu 4649 Professor Tian
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- ListView的使用
- Linux内核2.6的进程调度
- HDU-4647
- native2ascii命令常用
- iTunes安装不了怎么办(win7安装iTunes)..
- HDU 4649
- 标准C++中的string类的用法总结
- 几种压缩算法原理介绍
- 2013-Java基础面试题-异常处理
- Flex可视化组件相关基础知识
- [leetcode刷题系列]Remove Element
- 关于kindeditor和vaildform(二)
- CXF应用过程
- 网页如何防止刷新重复提交与如何防止后退的解决方法