zoukankan      html  css  js  c++  java
  • 【codeforces 698C】LRU

    题目链接:

      http://codeforces.com/problemset/problem/698/C

    题目大意:

      n个物品,k个格子,第i个物品每次被选取的概率为$p_{i}$,如果格子里没有该物品就把它丢进去,如果没有,再看格子是否被装满,如果被装满,就把最早选取的替换成该物品,求$10^{100}$次后格子里含有每个物品的概率。

      答案精度要求小于$10^{-6}$。

    题解:

      就不能自己玩一次试试吗= =

      因为选取的次数太多了,所以可以看做一定会选到能选取的物品。(有一些为0的当然选不到了)

      然后正着推……

      我们可以发现,一个物品是否存在只与其最后一次出现的位置有关(显然),同时重复一个物品的情况可以直接合并(不会对答案产生贡献)。即,问题在于最后若干次选取中,选到k个物品。所以我们的问题就变成了在k次选取中,选到每种物品的概率。

      然后……这题还有容斥流!?

      想想也是…然而没有写。

     1 #include<cstdio>
     2 using namespace std;
     3 int n,m;
     4 double ans[25];
     5 double f[1<<20];
     6 double p[25];
     7 int num[1<<20];
     8 double tot[1<<20];
     9 int main(){
    10     scanf("%d%d",&n,&m);
    11     int cnt=n;
    12     for(int i=0;i<n;i++){
    13         scanf("%lf",p+i),f[1<<i]=p[i];
    14         cnt-=(p[i]==0.0);
    15     }
    16     if(m>cnt) m=cnt;
    17     for(int i=0;i<(1<<n);i++)
    18         for(int j=0;j<n;j++)
    19             if(i&(1<<j))
    20                 num[i]++;
    21             else
    22                 tot[i]+=p[j];
    23     for(int s=1;s<(1<<n);s++){
    24         for(int i=0;i<n;i++){    
    25                 if((1<<i)&s)
    26                     continue;
    27                 else    if(tot[s]!=0)    f[(1<<i)|s]+=f[s]*p[i]/tot[s];
    28         }
    29     }
    30     for(int i=1;i<(1<<n);i++)
    31         if(num[i]==m)
    32             for(int j=0;j<n;j++)    
    33                 ans[j]+=f[i]*(((1<<j)&i)>0);
    34     for(int i=0;i<n;i++)
    35         printf("%.20lf ",ans[i]);
    36 }

      

  • 相关阅读:
    Centos 安装postgreSQL9.4.3
    widnows2008双网卡双ip不同Ip段
    centos7服务器远程安装图形化页面
    yum install 安装时报yum doesn't have enough cached data to continue.
    linux通过ntpd同步服务器时间,
    电脑端微信多开
    h3c交换机配置ssh密码验证登录方式
    【Windows】Win10家庭版启用组策略gpedit.msc
    IOI2019游记
    Educational Codeforces Round 70
  • 原文地址:https://www.cnblogs.com/Troywar/p/7470251.html
Copyright © 2011-2022 走看看