首页 > 其他分享 >【XSY3409】树(概率与期望,思维)

【XSY3409】树(概率与期望,思维)

时间:2022-10-30 12:34:37浏览次数:42  
标签:思维 概率 期望 游戏 int sum ch XSY3409 ans

考虑累加种下第 \(i\) 棵不同的树树到种下第 \(i+1\) 棵不同的树之间的时间间隔,设 \(f(i)\) 表示种了 \(i\) 棵不同的树游戏仍未结束的概率,那么有:

\[\begin{aligned} ans&=\sum_{i=0}^{n-1}f(i)\left(\sum_{t=0}^{\infty}\left(\frac{i}{n}\right)^t\left(1-\frac{i}{n}\right)(t+1)\right)\\ &=\sum_{i=0}^{n-1}\frac{n}{n-i}f(i) \end{aligned} \]

设 \(g(i)\) 表示恰好在种了 \(i\) 棵不同的树时游戏结束的概率,那么有 \(f(i)=1-\sum_{j\leq i}g(j)\)。

考虑恰好在种了 \(i\) 棵不同的树时游戏结束的情形会是怎样:有 \(i\) 个位置是我们种的树,剩下 \(n-i\) 个位置是它们自己长出来的(称这些位置为空位置),我们需要保证这 \(n-i\) 个空位置不能相邻(否则长不出来)。把符合这种条件的游戏情形称为 ”结束情形“。

考虑先把这 \(n-i\) 个位置选出来,概率为 \(\dfrac{\binom{i}{n-i}}{\binom{n-1}{i-1}}\)。

当然也有可能一些本来我们要种树的地方它自己长出来了,导致游戏提前结束,所以这部分的概率要剪掉。而发现当存在空位置相邻时游戏一定不可能结束,所以(在我们限制的情形下,游戏提前结束的概率)就等于(游戏提前结束的概率),即游戏不可能在我们限制的情形之外提前结束,于是直接减掉 \(\sum_{j<i}g(j)\) 即可,即:

\[g(i)=\dfrac{\binom{i}{n-i}}{\binom{n-1}{i-1}}-\sum_{j<i}g(j) \]

你发现 \(f(i)\) 刚好等于 \(\dfrac{\binom{i}{n-i}}{\binom{n-1}{i-1}}\),即把 \(n-i\) 个位置选出来的概率。

另一种解释是:考虑在所有树都长出来的情况下 ”宣布“ 游戏结束,但仍能继续种树,那么之后无论我怎么种树总是满足 ”结束情形“ 的要求。所以前 \(i\) 轮中 ”宣布“ 了游戏结束的概率就等于第 \(i\) 轮时的情形满足 ”结束情形“ 要求的概率。

#include<bits/stdc++.h>

#define N 10000010

using namespace std;

namespace modular
{
	const int mod=1000000007;
	inline int add(int x,int y){return x+y>=mod?x+y-mod:x+y;}
	inline int dec(int x,int y){return x-y<0?x-y+mod:x-y;}
	inline int mul(int x,int y){return 1ll*x*y%mod;}
	inline void Add(int &x,int y){x=x+y>=mod?x+y-mod:x+y;}
}using namespace modular;

inline int poww(int a,int b)
{
	int ans=1;
	while(b)
	{
		if(b&1) ans=mul(ans,a);
		a=mul(a,a);
		b>>=1;
	}
	return ans;
}

inline int read()
{
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		x=(x<<1)+(x<<3)+(ch^'0');
		ch=getchar();
	}
	return x*f;
}

int n,fac[N],ifac[N];

inline int inv(int x)
{
	return mul(ifac[x],fac[x-1]);
}

inline int C(int n,int m)
{
	return mul(mul(fac[n],ifac[m]),ifac[n-m]);
}

inline int invC(int n,int m)
{
	return mul(mul(ifac[n],fac[m]),fac[n-m]);
}

int main()
{
	n=read();
	fac[0]=1;
	for(int i=1;i<=n;i++) fac[i]=mul(fac[i-1],i);
	ifac[n]=poww(fac[n],mod-2);
	for(int i=n;i>=1;i--) ifac[i-1]=mul(ifac[i],i);
	int ans=0;
	for(int i=0;i<n;i++)
		Add(ans,mul(inv(n-i),i>=n-(n/2)?dec(1,mul(C(i,n-i),invC(n-1,i-1))):1));
	printf("%d\n",mul(ans,n));
	return 0;
}

标签:思维,概率,期望,游戏,int,sum,ch,XSY3409,ans
From: https://www.cnblogs.com/ez-lcw/p/16840978.html

相关文章

  • 【XSY3330】地中海气候(思维)
    题目让我们动态维护一个堆,有两种操作:加入一个数、询问并取出最大值。比较巧妙的地方是这两种操作是轮流进行的。我们可以用桶来维护这个堆,顺便记录一下当前桶内的最大值。......
  • 【XSY3241】暴风士兵(stormtrooper)(多项式分治,期望)
    设一个人被扣了\(i\)滴血的概率为\(p_i\),设\(c_i=exp-i\)且只有\(c_0,c_1,\cdots,c_{exp}\)有值,那么题目就是在问\(\sum\limits_{i=0}^{exp}c_ip_i\)。我们设\(p......
  • 【XSY3395】逃亡(概率与期望,组合数)
    首先“被经过的整点的期望个数”不好求,我们可以把它看成“每个整点被经过的概率的和”。对于某个整点,求“它被任意一个人经过的概率”不好求,我们可以求“它不被任意......
  • 【XSY3338】game(期望,点分治,FFT)
    题面game题解首先可以看出“等概率选连通块->连通块内等概率选点”相当于“全局等概率选点”。一开始感觉无从下手,但是题目中还是给了一点提示。题目让我们输出答......
  • 【CFgym102870J】Junction of Orz Pandas(思维,容斥)
    暴力做法就不会做……考虑容斥,用所有数\(\leqa_i\)的方案减去所有数\(<a_i\)的方案得到最大值为\(a_i\)的方案,\(b_i\)同理容斥,时间复杂度\(O(2^{n+m}nm)\)。直......
  • 【CF1537F】Figure Fixing(思维)
    题意:给一张图,每个点有一个可以为负的权值\(a_i\),一次操作可以选择一条边\((i,j)\)并让\(a_i,a_j\)同时增加任意一个可以为负的整数值,问是否存在操作方式使得所有点点......
  • 【CF553E】Kyoya and Train(期望dp,SPFA,FFT)
    考虑dp。发现正着dp好像不太好做,毕竟初值不太好设,而且时间一大于\(t\)费用就要加上\(x\),所以考虑倒着dp。设\(f_{u,j}\)表示现在已经到达\(u\)点,耗时\(j\),问......
  • 【ARC068F】Solitaire(dp,计数,思维)
    首先发现那个双端队列一定长这样:也就是说,这个队列中的数先单调递减,然后再单调递增,最小值为\(1\)。现在考虑从双端队列中取数,那么当我们取到\(1\)这个数时,我们会在原......
  • 「REMAKE系列」概率期望dp篇
    常见模型技巧总结概率正推,期望倒推简单概率期望简单分类讨论。P1297[国家集训队]单选错位根据题目推导。UVA11021Tribles需要一些小观察的题目01最终位置确定,倒......
  • atc 思维题思考
    大部分在学校想的,想出来的会直接交题解,因为题解会再现思考思路,会比较啰嗦。[2000,2200)abc266GYetAnotherRGBSequencediff2045time22/10/26挺简单的题,组合数......