【CF1349D】Slime and Biscuits【概率期望】【解方程】

题意:nnn个人共有mmm个饼干,每轮随机选一个饼干随机给一个另外的人,所有饼干都在一个人手里时游戏结束,求期望进行次数。模998244353998244353998244353

n≤105,m≤3×105n\leq10^5,m\leq3\times10^5n105,m3×105

首先肯定是每个人作为最终获得所有饼干的人分别考虑。

但是如果只考虑这个人的话,无法确定游戏进行过程中是否已经在其他人那里结束了。

所以干脆改下规则:设当前考虑的人为xxx,规定只有xxx收集完所有饼干后游戏才结束。也就是有人收集完了所有饼干后,如果他不是xxx,游戏继续进行;否则游戏立即结束。

为了后面讲清楚,这里给一个不正式的严谨定义:设R,R1∼RnR,R_1\sim R_nR,R1Rn表示游戏遵循的规则,其中RRR表示任何一个人收集了所有饼干后游戏结束,即原来的规则。Rx(x∈[1,n])R_x(x\in[1,n])Rx(x[1,n])表示只有xxx收集完游戏才结束的新规则。

设在RxR_xRx下游戏期望进行的次数为Ex′E_x'Ex。即:设f′(x,i)f'(x,i)f(x,i)表示游戏进行了iii步后结束且xxx获得了所有饼干的概率,Ex′=∑i=0∞i⋅f′(x,i)E'_x=\sum_{i=0}^{\infin}i\cdot f'(x,i)Ex=i=0if(x,i)

注:这个f′(x,i)f'(x,i)f(x,i)和后面的f(x,i)f(x,i)f(x,i)只是为了方便理解定义,对推导没有影响。

我们考虑寻找新的规则和原来的规则的联系

RRR下,设PxP_xPx表示游戏结束时所有饼干在xxx手上的概率,ExE_xEx表示所有饼干在xxx手上结束的所有情况 的 概率乘以时间 之和。(注意不是期望,概率的分母包括了在其他人那里结束的情况)

即:设f(x,i)f(x,i)f(x,i)表示游戏进行iii步后结束,xxx获得所有饼干的概率,Ex=∑i=0∞i⋅f(x,i),Px=∑i=0∞f(x,i)E_x=\sum_{i=0}^{\infin}i\cdot f(x,i),P_x=\sum_{i=0}^\infin f(x,i)Ex=i=0if(x,i),Px=i=0f(x,i)

∑i=1nPi=1,∑i=1nEi=ans\sum_{i=1}^n P_i=1,\sum_{i=1}^nE_i=ansi=1nPi=1,i=1nEi=ansansansans为题目所求

CCC表示在RjR_jRj下,现在所有饼干在iii手上且i≠ji\neq ji=j,游戏期望还要进行多少步。显然这是个与i,ji,ji,j无关的常数。

考虑用ExE_xEx表示出Ex′E_x'Ex

为了方便,我们称一个状态为iii类关键点,当且仅当这个状态的所有饼干都在iii手上。

考虑在RxR_xRx下的一场游戏,如果它只有结束状态这一个关键点,期望步数为ExE_xEx

否则我们枚举第一个关键点的类别iii,显然i≠xi\neq xi=x,不然游戏会提前结束。然后从这个关键点开始就是 从“所有点都在iii手上”这个状态开始的RxR_xRx游戏,期望步数为CCC

所以:

Ex′=Ex+∑i=1n[i≠x](Ei+PiC)E'_x=E_x+\sum_{i=1}^n[i\neq x](E_i+P_iC)Ex=Ex+i=1n[i=x](Ei+PiC)

如果你想不通为什么CCC要乘上PiP_iPi:

前面说过,Ex=∑i=0∞if(x,i)E_x=\sum_{i=0}^\infin if(x,i)Ex=i=0if(x,i)
换句话说,对于每一个iii,都有f(x,i)f(x,i)f(x,i)的可能性在iii步后 所有饼干都在xxx手上,在这里就是到达枚举的第一个关键点。
在这之后还需要CCC步来到最终结束的状态,即∑i=0∞(i+C)f(x,i)\sum_{i=0}^\infin(i+C)f(x,i)i=0(i+C)f(x,i)
Px=∑i=0∞f(x,i)P_x=\sum_{i=0}^{\infin}f(x,i)Px=i=0f(x,i),所以加上PiCP_iCPiC就可以了

拆一下:

Ex′=Ex+∑i=1n[i≠x](Ei+PiC)E'_x=E_x+\sum_{i=1}^n[i\neq x](E_i+P_iC)Ex=Ex+i=1n[i=x](Ei+PiC)

Ex′=Ex+∑i=1n[i≠x]Ei+∑i=1n[i≠x]PiCE'_x=E_x+\sum_{i=1}^n[i\neq x]E_i+\sum_{i=1}^n[i\neq x]P_iCEx=Ex+i=1n[i=x]Ei+i=1n[i=x]PiC

Ex′=∑i=1nEx+C∑i=1n[i≠x]PiE'_x=\sum_{i=1}^nE_x+C\sum_{i=1}^n[i\neq x]P_iEx=i=1nEx+Ci=1n[i=x]Pi

Ex′=ans+C(1−px)E'_x=ans+C(1-p_x)Ex=ans+C(1px)

x=1∼nx=1\sim nx=1n求和

∑i=1nEi′=n⋅ans+C(n−1)\sum_{i=1}^nE'_i=n\cdot ans+C(n-1)i=1nEi=nans+C(n1)

只要求出Ex′E'_xExCCC的值,问题就解决了!

CCC是严格包含于Ex′E_x'Ex的,所以我们的目标是解决新规则下的问题。

注意到在RxR_xRx下,我们并不关心每个饼干具体在谁手上,我们只关心它在不在xxx手上

所以可以设f(i)f(i)f(i)表示当前xxx手上有iii个饼干时期望进行次数。

f(i)={1+1n−1f(i+1)+n−2n−1f(i)x=01+imf(i−1)+m−im(1n−1f(i+1)+n−2n−1f(i))0<x<m0x=mf(i)= \begin{cases} 1+\frac{1}{n-1}f(i+1)+\frac{n-2}{n-1}f(i)& x=0\\ 1+\frac{i}mf(i-1)+\frac{m-i}{m}(\frac{1}{n-1}f(i+1)+\frac{n-2}{n-1}f(i))& 0<x<m\\ 0 & x=m \end{cases}f(i)=1+n11f(i+1)+n1n2f(i)1+mif(i1)+mmi(n11f(i+1)+n1n2f(i))0x=00<x<mx=m

解出这个方程就好了

暴力硬推是一种方法,这里有一个很优美的思路:

考虑中间的式子,记为

f(i)=Af(i−1)+Bf(i)+Cf(i+1)+1f(i)=Af(i-1)+Bf(i)+Cf(i+1)+1f(i)=Af(i1)+Bf(i)+Cf(i+1)+1

Af(i−1)+(B−1)f(i)+Cf(i+1)+1=0Af(i-1)+(B-1)f(i)+Cf(i+1)+1=0Af(i1)+(B1)f(i)+Cf(i+1)+1=0

注意到A+B+C=1A+B+C=1A+B+C=1,设g(i)=f(i)−f(i+1)g(i)=f(i)-f(i+1)g(i)=f(i)f(i+1)

A⋅g(i−1)+(A+B−1)g(i)+1=0A\cdot g(i-1)+(A+B-1)g(i)+1=0Ag(i1)+(A+B1)g(i)+1=0

g(i)=A⋅g(i−1)+1Cg(i)=\frac{A\cdot g(i-1)+1}{C}g(i)=CAg(i1)+1

这样推一次就可以把ggg算出来,求个后缀和就得到了fff

然后Ex′=f(ai),C=f(0)E_x'=f(a_i),C=f(0)Ex=f(ai),C=f(0)

复杂度O(n)O(n)O(n)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cctype>
#define MAXN 300005
using namespace std;
inline int read()
{int ans=0;char c=getchar();while (!isdigit(c)) c=getchar();while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();return ans;
}
const int MOD=998244353;
typedef long long ll;
inline int qpow(int a,int p)
{int ans=1;while (p){if (p&1) ans=(ll)ans*a%MOD;a=(ll)a*a%MOD;p>>=1;}return ans;
}
#define inv(x) qpow(x,MOD-2)
inline int add(const int& x,const int& y){return x+y>=MOD? x+y-MOD:x+y;}
inline int dec(const int& x,const int& y){return x<y? x-y+MOD: x-y;}
int a[MAXN],f[MAXN];
int main()
{int n=read(),m=0;for (int i=1;i<=n;i++) m+=(a[i]=read());f[0]=n-1;for (int i=1;i<m;i++) f[i]=((ll)i*inv(m)%MOD*f[i-1]%MOD+1)*m%MOD*(n-1)%MOD*inv(m-i)%MOD;for (int i=m;i>=0;i--) f[i]=add(f[i],f[i+1]);int sum=0;for (int i=1;i<=n;i++) sum=add(sum,f[a[i]]);sum=dec(sum,f[0]*(n-1ll)%MOD);sum=(ll)sum*inv(n)%MOD;cout<<sum;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315004.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多租户通用权限设计(基于 casbin)

所谓权限控制, 概念并不复杂, 就是确认某个操作是否能做, 本质上仅仅就是个bool判断.权限几乎是每个系统必不可少的功能, 和具体业务结合之后, 在系统中往往表现的非常复杂和难于控制, 很大部分原因是把权限和具体业务结合的太过紧密, 把业务的复杂度也加入到权限控制中来了.一…

Codeforces Round #225 (Div. 1) E. Vowels 容斥 + sosdp

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你nnn个长度为333的串&#xff0c;串的每个字母都在a−za-za−z范围内&#xff0c;定义一个串合法当且仅当这个串中含有至少一个元音字母。现在他忘记了元音字母都有那几个&#xff0c;显然有2242^{24}224…

【CF1344D】Résumé Review【数学】【二分】

题意&#xff1a;给定长度为nnn的自然数序列aaa和整数kkk&#xff0c;要求构造长度为nnn的自然数序列bbb&#xff0c;使得0≤bi≤ai,∑bik0\leq b_i\leq a_i,\sum b_ik0≤bi​≤ai​,∑bi​k&#xff0c;且∑bi(ai−bi2)\sum b_i(a_i-b_i^2)∑bi​(ai​−bi2​)最大化。 n≤105…

容器化单页面应用中RESTful API的访问

最近在工作中&#xff0c;需要让运行在容器中的单页面应用程序能够访问外部的RESTful API。这个需求看起来并不困难&#xff0c;不过实现起来还是有些曲折的。在此&#xff0c;我就将这部分内容总结一下。在入正题之前&#xff0c;有个一问题&#xff0c;就是为什么要将单页面应…

2020牛客暑期多校训练营(第六场)H.Harmony Pairs 数位dp

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个nnn&#xff0c;问你有多少对0≤a≤b≤n0\le a\le b\le n0≤a≤b≤n满足S(a)>S(b)S(a)>S(b)S(a)>S(b)。其中S(a)S(a)S(a)表示aaa的十进制各位数之和。 思路&#xff1a; 显然的数位dpdpd…

【PKUWC2018】随机游走【Min-Max容斥】【树形dp】【FWT】

题意&#xff1a;给一棵nnn个点的无权树和xxx&#xff0c;qqq次询问&#xff0c;每次给定一个点集SSS,询问从xxx开始每次随机走一步&#xff0c;SSS中的每个点至少被经过一次的期望步数。 n≤18,q≤5000n\leq 18,q\leq 5000n≤18,q≤5000 题目求的相当于是SSS中的所有点 第一次…

LogoSharp:Logo语言的C#实现

上周在朋友中问了一圈&#xff0c;发现没有几个人知道Logo语言的&#xff0c;或许&#xff0c;这门古老的语言现在用的人已经非常少了&#xff0c;除了国外有少量的用户将Logo语言用于教育外&#xff0c;估计国内不会有人使用这门语言。其实&#xff0c;Logo语言本来也就是以编…

hdu 6899 Xor 数位dp

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 问你有多少对x,yx,yx,y满足以下条件&#xff1a; (1)x∈[0,A],y∈[0,B](1)x \in [0,A],y\in [0,B](1)x∈[0,A],y∈[0,B] (2)∣x−y∣≤K(2)|x-y|\le K(2)∣x−y∣≤K (3)xxory≤W(3)x \ \ xor \ \ y\le W(3)…

【PKUWC2018】Minimax【线段树合并】

题意&#xff1a;给定一棵nnn个点的二叉树&#xff0c;叶子的权值输入给定且互不相同&#xff0c;非叶子结点iii的权值有pip_ipi​的概率为儿子结点权值最大值&#xff0c;1−pi1-p_i1−pi​的概率为最小值。求根结点取每种值的概率。模998244353998244353998244353。 n≤3105n…

对数位dp的一些拙见

这不是一篇介绍数位dpdpdp的文章&#xff0c;只是我思考后的一些记录&#xff0c;怕以后就忘记了。 由于博主太菜不会组合数学&#xff0c;以下数位dpdpdp均采用记忆化搜索的方式。 首先最重要的就是状态设计了&#xff0c;正常来说数位dpdpdp的状态设计需要包含数的结构和状态…

Hello Kubernetes快速交互实验手册

“ K8S在线实验室提供了一个交互实验环境&#xff0c;现将这部分文章精简并翻译为中文&#xff0c;希望对那些不了解K8S的童鞋有帮助&#xff0c;能够快速玩起来有个感性认识...”原文&#xff1a;https://kubernetes.io/docs/tutorials翻译&#xff1a;Edison ZhouHello Kuber…

【ZJOI2018】历史【结论】【LCT思想】

题意&#xff1a;一棵nnn个点的树&#xff0c;每个点有权值aia_iai​&#xff0c;初始时给定。维护&#xff1a; 单点权值加上一个正数。 询问每个点恰好执行aia_iai​次 access 操作&#xff0c;任意安排顺序的条件下切换轻重链总次数的最大值。 n≤4105n\leq 4\times 10^5n…

2020 ICPC 上海 Sum of Log 数位dp + 状态剪枝

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 观察可以发现&#xff0c;由于i&j0i \And j0i&j0&#xff0c;所以log2(ij)log_2(ij)log2​(ij)表示的应该是ijijij的111的最高位。 一个显然的dpdpdp状态就出来了f[pos][flag1][fl…

从MVP到微软产品经理的几点心得

昨天&#xff0c;我应邀在微软2019年暑期实习生的入职培训活动上做了一个简短的分享 —— 以我自身的职业发展过程为例&#xff0c;给大家讲了一讲我是怎样从一个技术爱好者&#xff0c;到获得第一个MVP&#xff08;微软最有价值专家&#xff09;的荣誉奖项&#xff0c;以及后来…

【UOJ188】 Sanrd【类min_25筛】

题意&#xff1a;设f(i)f(i)f(i)表示iii的不严格次大质因子&#xff08;没有为000&#xff09;&#xff0c;求∑ilrf(i)\sum_{il}^rf(i)∑ilr​f(i) l≤r≤1011l\leq r\leq10^{11}l≤r≤1011 这种和质因数有关的奇奇怪怪的函数的前缀和可以试试魔改min_25筛 设 S(n,j)∑i2n[m…

小白开学Asp.Net Core 《六》 —— 探究.Net Core 跨平台的奥秘

1、写这篇文章的初衷有好多朋友反馈看不懂我写的开源的一个练手项目&#xff08;GitHub&#xff1a;https://github.com/AjuPrince/Aju.Carefree&#xff09;也有好多人都希望我能写一些简单的入门的文章&#xff0c;记得前几天在群里有人问为什么 .Net Core 能跨平台&#xff…

Codeforces Round #636 (Div. 3) D. Constant Palindrome Sum 思维 + 差分

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 首先有一个显然的性质就是每组操作最多不会超过两次。 很容易想到一个很暴力的思路&#xff0c;就是枚举x∈[1,2∗k]x \in [1,2*k]x∈[1,2∗k]&#xff0c;让后判断一下每组需要操作几次取…

C#8.0: 在 LINQ 中支持异步的 IAsyncEnumerableT接口

C# 8.0中&#xff0c;提供了一种新的IAsyncEnumerable<T>接口&#xff0c;在对集合进行迭代时&#xff0c;支持异步操作。比如在读取文本中的多行字符串时&#xff0c;如果读取每行字符串的时候使用同步方法&#xff0c;那么会导致线程堵塞。IAsyncEnumerable<T>可…

SCOI2020游记

考试期间发现只有T1看起来可做&#xff0c;脑子发麻硬刚5小时&#xff0c;最后还是只交了40分暴力 考完后用一节数学课口胡出了T2 100pts和T3 80pts&#xff0c;并且发现只有T1不会做 退役了&#xff0c;告辞

Codeforces Round #636 (Div. 3) E. Weights Distributing 思维 + bfs

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; n≤2e5,m≤2e5n\le2e5,m\le2e5n≤2e5,m≤2e5 思路&#xff1a; 怎么感觉每场div3div3div3都有一个巧妙的图论题。 首先如果只有两个点的话&#xff0c;肯定是一次bfsbfsbfs之后取前disdisdis小的www作为边权…