• 统计算概率——Codeforces Beta Round #84 D


    比赛的时候,想到用表的方法进行统计,但是直到最后还是没敢敲

    先打表生成一个幸运数的表

    再枚举幸运数的表进行统计

    注意打表时会超int,果断__int64

    View Code
    #include<iostream>
    #include
    <algorithm>
    using namespace std;
    __int64 pl,pr,vl,vr,k;
    __int64 len
    =0;
    __int64 c[
    10009];
    void dfs(__int64 n)//生成4,7...的表
    {
    if(n>pr&&n>vr)
    return;
    c[len]
    =n;
    len
    ++;
    dfs(n
    *10+4);
    dfs(n
    *10+7);
    }

    double poss(__int64 l1,__int64 r1,__int64 l2,__int64 r2)//计算(l1,r1)在(l2,r2)的概率
    {
    if(l1<l2)l1=l2;
    if(r1>r2)r1=r2;
    if(l1>r1)return 0;
    else return (r1-l1+1)*1.0/(r2-l2+1);
    }

    int main()
    {

    scanf(
    "%d%d%d%d%d",&pl,&pr,&vl,&vr,&k);

    __int64 i;
    dfs(
    0);
    c[len]
    =1000000000;
    len
    --;
    double ret=0;
    sort(
    &c[0],&c[len+1]);
    for(i=1;i+k-1<=len;i++)
    {
    ret
    +=poss(max(c[i-1]+1,pl),c[i],pl,pr)*poss(c[i+k-1],min(vr,c[i+k]-1),vl,vr);//
    ret+=poss(max(c[i-1]+1,vl),c[i],vl,vr)*poss(c[i+k-1],min(pr,c[i+k]-1),pl,pr);//
    if(k==1)
    {
    ret
    -=poss(c[i],c[i],pl,pr)*poss(c[i],c[i],vl,vr);//如 (4,4)(4,4)会统计两次所以减去,而(1,4)(4,1)没事
    }
    }
    printf(
    "%.11lf",ret);

    }
  • 相关阅读:
    Tips
    react
    Vue 双向绑定
    jQuery 学习笔记
    CC NOV17
    一种高效处理无修改区间或树上询问的数据结构(附代码)
    HNOI 2017
    PA2015
    bzoj 泛做
    GG
  • 原文地址:https://www.cnblogs.com/huhuuu/p/2159699.html
Copyright © 2020-2023  润新知