P3175 [HAOI2015] 按位或
题目描述
刚开始你有一个数字 $0$,每一秒钟你会随机选择一个 $[0,2^n-1]$ 的数字,与你手上的数字进行或(C++,C 的 `|`,pascal 的 `or`)操作。选择数字 $i$ 的概率是 $p_i$。保证 $0\leq p_i \leq 1$,$\sum p_i=1$ 。问期望多少秒后,你手上的数字变成 $2^n-1$。
输入格式
无
输出格式
无
说明/提示
对于 $100\%$ 的数据,$n\leq 20$。
以下为 spj 源代码。
```cpp
//liuchenrui
#include
#include
#include
#include
#include
#define AC {fclose(fstd),fclose(fuser);return 0;}
#define WA {fclose(fstd),fclose(fuser);return 1;}
#define PE {fclose(fstd),fclose(fuser);return 5;}
#define eps 1e-6
int main(int const argc, char*const argv[]){
FILE *fstd,*fuser;
fstd=fopen(argv[2],"r");
fuser=fopen(argv[3],"r");
//fstd=fopen("x1.in","r");
//fuser=fopen("x2.in","r");
char s[30],t[30];
if(fscanf(fuser,"%s",s+1)==-1)WA;
fscanf(fstd,"%s",t+1);
if(s[1]=='I' && t[1]=='I')AC;
if(s[1]=='I' || t[1]=='I')WA;
double p,q;
sscanf(s+1,"%lf",&p);
sscanf(t+1,"%lf",&q);
if(fabs(p-q)