CF698C. LRU

题意:n种物品,大小为k的队列,\(p_i\)的概率选择第i种物品放入队尾,如果已经有i了就不放了。队列大小>k时弹出队首。求\(10^{100}\)次操作后每种物品在队列里的概率


为什么没有官方题解啊,所以看了讨论区的题解

一开始想的是,一个元素在队列里,说明后来加入的元素种类<k,对于每种物品i,求出每个\(|S| =0…k-1 : i \notin S\)的集合出现在i右面的概率就行了。但这时候要求的是\(S\)中每种物品至少出现1次,至多无限次,只是简单的乘上\(\prod\limits_{i \in S}p_i\) 再乘上 \(\frac{1}{1-x}\)是不对的。

所以考虑容斥原理,求出\(S\)的任意子集出现的概率。

求这个概率很简单,每种元素可以不出现,设\(x=\sum\limits_{i \in S}p_i\),那么

\(P=x+x^2+...+x^{\infty}=\frac{1}{1-x}\)

根据容斥原理,\(i\)的答案就是

\[\le k-1种元素的集合出现的概率\ -\ \le k-2种元素的集合出现的概率*容斥系数\ +\ ...
\]

和之前的恰好k个问题一样,这个容斥系数需要乘上超集的个数,比如大小为\(i\)的集合,他的大小为\(j\)的超集的个数是\(\binom{n-1-i}{j-i}\),注意是\(n-1\)因为当前计算答案的元素不能选

需要注意的是,我们要同时求恰好\(0...k-1\)个,所以每个的容斥系数都要+1,并且要处理之前所有大小的超集

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=21, M=(1<<20)+5;
inline int read(){
char c=getchar();int x=0,f=1;
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
} int n, k, c[N][N];
double p[N], sum[M], coe[N], g[M];
inline int one(int x) { int c=0; while(x) x&=x-1, c++; return c; } int main() {
freopen("in","r",stdin);
n=read(); k=read();
for(int i=0; i<n; i++) scanf("%lf",&p[i]), sum[1<<i] = p[i];
c[0][0]=1;
for(int i=1; i<=n; i++) {
c[i][0]=1;
for(int j=1; j<=i; j++) c[i][j] = c[i-1][j] + c[i-1][j-1];
} int all=1<<n;
for(int i=0; i<all; i++) if(!sum[i]) sum[i] = sum[i&-i] + sum[i^(i&-i)];
for(int i=k-1; i>=0; i--) {
coe[i] = 1;
for(int j=i+1; j<=k-1; j++) coe[i] -= coe[j] * c[n-1-i][j-i];
//printf("coe %d %lf\n",i,coe[i]);
} for(int i=0; i<n; i++) {
if(p[i]==0 || p[i]==1 || k==1) {printf("%.9lf ", p[i]); continue;}
double ans=0;
for(int s=0; s<all; s++)
if(!((1<<i) & s) && one(s)<=k-1) ans += coe[one(s)]/(1-sum[s]);// printf("s %d %lf\n",s, ans);
printf("%.9lf ", p[i]*ans);
}
}

CF698C. LRU [容斥原理 概率]的更多相关文章

  1. CF698C - LRU

    这又是什么毒瘤..... 解:把操作序列倒着来,就是考虑前k个入队的元素了.显然这样每个元素的概率不变. 状压.设fs表示当前元素为s的概率. 每次转移的时候选择一个不在s中的元素,作为下一个加入的元 ...

  2. hdu4336 Card Collector 概率dp(或容斥原理?)

    题意: 买东西集齐全套卡片赢大奖.每个包装袋里面有一张卡片或者没有. 已知每种卡片出现的概率 p[i],以及所有的卡片种类的数量 n(1<=n<=20). 问集齐卡片需要买东西的数量的期望 ...

  3. Codeforces Round #363 LRU(概率 状压DP)

    状压DP: 先不考虑数量k, dp[i]表示状态为i的概率,状态转移方程为dp[i | (1 << j)] += dp[i],最后考虑k, 状态表示中1的数量为k的表示可行解. #incl ...

  4. 51Nod 1667 概率好题 - 容斥原理

    题目传送门 无障碍通道 有障碍通道 题目大意 若$L_{i}\leqslant x_{i} \leqslant R_{i}$,求$\sum x_{i} = 0$以及$\sum x_{i} < 0 ...

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

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

  6. LOJ2541 PKUWC2018猎人杀(概率期望+容斥原理+生成函数+分治NTT)

    考虑容斥,枚举一个子集S在1号猎人之后死.显然这个概率是w1/(Σwi+w1) (i∈S).于是我们统计出各种子集和的系数即可,造出一堆形如(-xwi+1)的生成函数,分治NTT卷起来就可以了. #i ...

  7. 2018.08.31 bzoj3566: [SHOI2014]概率充电器(概率dp+容斥原理)

    传送门 概率dp好题啊. 用f[i]" role="presentation" style="position: relative;">f[i] ...

  8. [LibreOJ 3124]【CTS2019】氪金手游【容斥原理】【概率】【树形DP】

    Description Solution 首先它的限制关系是一个树形图 首先考虑如果它是一个外向树该怎么做. 这是很简单的,我们相当于每个子树的根都是子树中最早出现的点,概率是容易计算的. 设DP状态 ...

  9. [LOJ3124][CTS2019|CTSC2019]氪金手游:树形DP+概率DP+容斥原理

    分析 首先容易得出这样一个事实,在若干物品中最先被选出的是编号为\(i\)的物品的概率为\(\frac{W_i}{\sum_{j=1}^{cnt}W_j}\). 假设树是一棵外向树,即父亲比儿子先选( ...

随机推荐

  1. mysql中配置ssl_key、ssl-cert、ssl-ca的路径及建立ssl连接

    1.创建 CA 私钥和 CA 证书 (1)下载并安装openssl,将bin目录配置到环境变量: (2)设置openssl.cfg路径(若不设置会报错,找不到openssl配置文件) \bin\ope ...

  2. Hbuilder实用技巧

    转自:http://blog.csdn.net/qq_34099161/article/details/51451712 1. Q:怎么实现代码追踪? A:在编辑代码时经常会出现需要跳转到引用文件或者 ...

  3. 文件末尾判断feof

    feof 作用:如果文件结束,则返回非0值,否则返回0 但要注意的是feof要读取到文件结束标志EOF后,才能判断文件是否结束. 所以使用while(!feof(pFile))会出现最后fread会返 ...

  4. 将本地项目或代码上传到别人GitHub(码云)的远程分支上

    今天碰到了这样一个问题,折腾了半天,就是将自己本地代码上传到人家的远程分支上. 首先要做的就是先将人家的项目克隆到本地:git clone + 项目地址 然后进入项目目录:cd + 已克隆好的项目目录 ...

  5. 怎样实现给DEDE的栏目增加栏目图片(2)

    2.3 打开dede/templets/catalog_edit.htm页面,查找 栏目名称:

  6. 邓_Excal

    --------------------------------------------------------------------- 快速输入固定文字 有一些固定的词组,输入 1 个.2 个,貌 ...

  7. [机器学习]-[数据预处理]-中心化 缩放 KNN(二)

    上次我们使用精度评估得到的成绩是 61%,成绩并不理想,再使 recall 和 f1 看下成绩如何? 首先我们先了解一下 召回率和 f1. 真实结果 预测结果 预测结果   正例 反例 正例 TP 真 ...

  8. Centos 6.9安装配置MongoDB

    注意:centos6上就不要装mongo3了,容易出错. 1. 下载 curl -O http://downloads.mongodb.org/linux/mongodb-linux-x86_64-2 ...

  9. oracle02

    SQL语句完整结构: select from where group by having order by 今天分享的知识点:(1)分组查询 select 中非组函数的列需要在group by 进行参 ...

  10. python_缩进_格式化代码

    pycharm如何格式化代码? ctrl + alt + l pycharm如何缩进代码? tab  向右缩进4格 shift + tab 向左缩进4格