P3175 [HAOI2015]按位或

    • 339通过
    • 711提交
  • 题目提供者 洛谷
  • 评测方式 云端评测
  • 标签 容斥 集合论 2015 河南 Special Judge 高性能
  • 难度 NOI/NOI+/CTSC
  • 时空限制 1000ms / 128MB

题解

  • 提示:收藏到任务计划后,可在首页查看。
  • 最新讨论 显示

    推荐的相关题目 显示

    题目描述

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

    输入输出格式

    输入格式:

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

    输出格式:

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

    输入输出样例

    输入样例#1: 复制
    2
    0.25 0.25 0.25 0.25
    输出样例#1: 复制
    2.6666666667

    说明

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

    //liuchenrui 
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<cmath>
    #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)<eps)AC
        else{
            if(fabs(p-q)/q<eps)AC;
            if(fabs(q-p)/q<eps)AC;
            if(fabs(p-q)/p<eps)AC;
            if(fabs(q-p)/p<eps)AC;
        }
        WA;
    }
    
    提示
    标程仅供做题后或实在无思路时参考。
    请自觉、自律地使用该功能并请对自己的学习负责。
    如果发现恶意抄袭标程,将按照I类违反进行处理。