【BZOJ4036】[HAOI2015]按位或

Description

刚开始你有一个数字0,每一秒钟你会随机选择一个[0,2^n-1]的数字,与你手上的数字进行或(c++,c的|,pascal的or)操作。选择数字i的概率是p[i]。保证0<=p[i]<=1,Σp[i]=1问期望多少秒后,你手上的数字变成2^n-1。

Input

第一行输入n表示n个元素,第二行输入2^n个数,第i个数表示选到i-1的概率

Output

仅输出一个数表示答案,绝对误差或相对误差不超过1e-6即可算通过。如果无解则要输出INF

Sample Input

2
0.25 0.25 0.25 0.25

Sample Output

2.6666666667

HINT

对于100%的数据,n<=20

题解:先判无解。然后进行fwt。对于每一项p,一次操作变成p的概率是$p$,两次是$p^2$,三次是$p^3$...所以期望次数就是$p\over (p-1)$。特别地,$2^n-1$的p=1,因为它不需要操作所以次数为0。再fwt回去即可。

手写小数读入优化炸精度调了半个小时~再也不写小数读入优化了~

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <iostream>
  4. #include <algorithm>
  5. using namespace std;
  6. typedef double db;
  7. const int maxn=(1<<20)+4;
  8. const db eps=1e-7;
  9. db f[maxn],g[maxn];
  10. bool vis[30];
  11. int n;
  12. db rd()
  13. {
  14. db ret=0,tmp=0.1; char gc=getchar();
  15. while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
  16. if(gc=='.')
  17. {
  18. gc=getchar();
  19. while(gc>='0'&&gc<='9') ret=ret+(gc-'0')*tmp,tmp/=10,gc=getchar();
  20. }
  21. return ret;
  22. }
  23. inline void fwt(db *a)
  24. {
  25. int i,h;
  26. for(h=0;h<n;h++) for(i=0;i<(1<<n);i++) if((i>>h)&1) a[i]+=a[i^(1<<h)];
  27. }
  28. inline void ufwt(db *a)
  29. {
  30. int i,h;
  31. for(h=0;h<n;h++) for(i=0;i<(1<<n);i++) if((i>>h)&1) a[i]-=a[i^(1<<h)];
  32. }
  33. int main()
  34. {
  35. n=rd();
  36. int i,j;
  37. for(i=0;i<(1<<n);i++)
  38. {
  39. scanf("%lf",&f[i]);
  40. if(f[i]>0) for(j=0;j<n;j++) if((i>>j)&1) vis[j]=1;
  41. }
  42. for(j=0;j<n;j++) if(!vis[j])
  43. {
  44. puts("INF");
  45. return 0;
  46. }
  47. fwt(f);
  48. for(i=0;i<(1<<n);i++)
  49. {
  50. if(i==(1<<n)-1) f[i]=0;
  51. else f[i]=f[i]/(f[i]-1);
  52. }
  53. ufwt(f);
  54. printf("%.10lf",f[(1<<n)-1]+1);
  55. return 0;
  56. }//2 0.25 0.25 0.25 0.25

【BZOJ4036】[HAOI2015]按位或 FWT的更多相关文章

  1. BZOJ4036 [HAOI2015]按位或 FWT

    原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ4036.html 题目传送门 - BZOJ4036 题意 刚开始你有一个数字 $0$ ,每一秒钟你会随机 ...

  2. BZOJ4036 [HAOI2015]按位或 【minmax容斥 + 期望 + FWT】

    题目链接 BZOJ4036 题解 好套路的题啊,,, 我们要求的,实际上是一个集合\(n\)个\(1\)中最晚出现的\(1\)的期望时间 显然\(minmax\)容斥 \[E(max\{S\}) = ...

  3. BZOJ4036 HAOI2015按位或(概率期望+容斥原理)

    考虑min-max容斥,改为求位集合内第一次有位变成1的期望时间.求出一次操作选择了S中的任意1的概率P[S],期望时间即为1/P[S]. 考虑怎么求P[S].P[S]=∑p[s] (s&S& ...

  4. [BZOJ4036] [HAOI2015]按位或

    传送门:https://lydsy.com/JudgeOnline/problem.php?id=4036 Description 刚开始你有一个数字0,每一秒钟你会随机选择一个[0,2^n-1]的数 ...

  5. bzoj4036 [HAOI2015]按位或 状压DP + MinMax 容斥

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4036 题解 变成 \(2^n-1\) 的意思显然就是每一个数位都出现了. 那么通过 MinMa ...

  6. bzoj4036 / P3175 [HAOI2015]按位或

    bzoj4036 / P3175 [HAOI2015]按位或 是一个 min-max容斥 的板子题. min-max容斥 式子: $ \displaystyle max(S) = \sum_{T\su ...

  7. 【BZOJ4036】按位或(Min-Max容斥,FWT)

    [BZOJ4036]按位或(Min-Max容斥,FWT) 题面 BZOJ 洛谷 题解 很明显直接套用\(min-max\)容斥. 设\(E(max\{S\})\)表示\(S\)中最晚出现元素出现时间的 ...

  8. [BZOJ 4036][HAOI2015]按位或

    4036: [HAOI2015]按位或 Time Limit: 10 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 746  Solved: 4 ...

  9. [luogu 3175] [HAOI2015]按位或(min-max容斥+高维前缀和)

    [luogu 3175] [HAOI2015]按位或 题面 刚开始你有一个数字0,每一秒钟你会随机选择一个[0,2^n-1]的数字,与你手上的数字进行按位或运算.问期望多少秒后,你手上的数字变成2^n ...

随机推荐

  1. winform下通过webclient使用非流方式上传(post)数据和文件

    这两天因为工作的需要,需要做一个winform上传数据到服务器端的程序.当时第一个想法是通过webservice的方式来实现,后来觉得麻 烦,想偷懒就没有用这样的方式,http的post方式变成了第一 ...

  2. QT 运行崩溃:The inferior stopped because it received a signal from the Operating System

    最近在研究QT自带的boxes例子,自己派生一个图形项,但是在运行生成该图形项时程序直接退出了~ Qt Creater调试代码,问题定位如下代码行: 执行1270行时弹出错误消息框: 于是上网查找资料 ...

  3. thinkphp 在阿里云上的nginx.config配置

    # For more information on configuration, see: # * Official English Documentation: http://nginx.org/e ...

  4. AndroidManifest详解

    一,重要性AndroidManifest.xml是Android应用程序中最重要的文件之一.它是Android程序的全局配置文件,是每个 android程序中必须的文件.它位于我们开发的应用程序的根目 ...

  5. Dubbo -- 系统学习 笔记 -- 入门

    Dubbo -- 系统学习 笔记 -- 目录 入门 背景 需求 架构 用法 入门 背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行, ...

  6. WAF Bypass数据库特性(Access探索篇)

    0x01 背景 无聊,测试了一下access特性 0x02 测试 常见有5个位置即:select * from admin where id=1[位置一]union[位置二]select[位置三]1, ...

  7. 【RF库XML测试】通过xpath查找元素的说明

    Tag names:当仅使用1个tag的时候,xpath匹配具有该标签名称的所有直接子元素. Paths:通过/符号连接tag名称,例如second/child将匹配父元素second下所有的chil ...

  8. AESDK开发之UI消息响应

    UI创建: 在该入口下 case PF_Cmd_PARAMS_SETUP: //.... break; 必须在末尾指定UI数目,UI数目一般是枚举,如果和枚举长度不一致也会报错.所以最好是直接修改枚举 ...

  9. [C] include <filename> 和 include "filename" 的区别

    在 C 语言中包含语句 #include <filename> 和 #include "filename" 的区别在于编译器的偏好,一般来说,使用双引号表示优先搜索当前 ...

  10. Linux下用C获取当前时间

    Linux下用C获取当前时间,具体如下: 代码(可以把clock_gettime换成time(NULL)) ? 1 2 3 4 5 6 7 8 9 10 void getNowTime() {  ti ...