首页 > 其他分享 >CF908D New Year and Arbitrary Arrangement 题解

CF908D New Year and Arbitrary Arrangement 题解

时间:2024-08-10 08:57:52浏览次数:8  
标签:infty limits 题解 mo times pb pa Year Arrangement

Description

给定 \(k,pa,pb\),有一初始为空的序列。

每次有 \(\dfrac{pa}{pa+pb}\) 的概率往序列后面加一个 a

每次有 \(\dfrac{pb}{pa+pb}\) 的概率往序列后面加一个 b

当出现大于等于 \(k\) 个形如 ab 的子序列(ab 不一定相邻)时停止。

求序列最终的 ab 子序列期望数。

Solution

为了更加简洁,文中的 \(pa\) 指题意中的 \(\dfrac{pa}{pa+pb}\),\(pb\) 指 \(\dfrac{pb}{pa+pb}\)。

看到求期望,可以先试着写写 dp

设 \(f_{i,j,t}\) 表示有 \(i\) 个 a、\(j\) 个 b、\(t\) 个 ab 时的期望。

发现当前有 \(i\) 个 a 时,再加一个 b 会产生 \(i\) 个 ab,与之前 b 的数量无关,所以省去一维 dp

设 \(f_{i,j}\) 表示有 \(i\) 个 a、\(j\) 个 ab 时的期望。

由于我们只知道终止状态,所以倒推会更好写且容易理解。

\(f_{i,j}\) 有 \(pa\) 的概率加 a 变为 \(f_{i+1,j}\),有 \(pb\) 的概率加 b 变为 \(f_{i,j+i}\),得出转移方程:

\[f_{i,j}=pa\times f_{i+1,j}+pb\times f_{i,j+i} \]

答案即为 \(f_{1,0}\)。

接下来是本题最难部分,求满足终止条件的 \(f\) 值。

终止条件为 \(i+j\ge k\),此时只要再加一个 b 就可以终止。

然而在加 b 前可能有若干个 a,无法确定 a 的数量,所以要开始推式子。

Sol1

这种方法用了等比数列的思想。

\[f_{i,j(i+j\ge k)}=i+j+\sum\limits_{x=0}^\infty pa^x\times pb\times x \]

\(x\) 为 a 的出现次数,a 每多在 b 前出现一次,最后的 ab 就会多一个,所以总共加了 \(i+j+x\) 个 ab

继续推:

\[=i+j+pb\times\sum\limits_{x=0}^\infty pa^x\times x \]

\[=i+j+(1-pa)\times\sum\limits_{x=0}^\infty pa^x\times x \]

设 \(T=\sum\limits_{x=0}^\infty pa^x\times x\)。

\[\therefore pa\times T=\sum\limits_{x=1}^\infty pa^x\times (x-1) \]

\(x\) 变为 \(x-1\) 的原因是 \(x\) 变为 \(1\) 开始。

\[\because T=\sum\limits_{x=1}^\infty pa^x\times x+pa^0\times0=\sum\limits_{x=1}^\infty pa^x\times x \]

\[\therefore (1-pa)\times T=\sum\limits_{x=1}^\infty pa^x \]

设 \(S=\sum\limits_{x=0}^\infty pa^x\)。

\[\therefore pa\times S=\sum\limits_{x=1}^\infty pa^x \]

\[\because S=\sum\limits_{x=1}^\infty pa^x+pa^0=\sum\limits_{x=1}^\infty pa^x+1=T+1 \]

\[\therefore (1-pa)S=pa^0=1 \]

\[S=\dfrac{1}{1-pa}=T+1 \]

\[\therefore T=\dfrac{1}{1-pa}-1=\dfrac{pa}{pb} \]

\[\therefore f_{i,j(i+j\ge k)}=i+j+\dfrac{pa}{pb} \]

Sol2

对于 \(f_{i,j}\) 和 \(f_{i+1,j}\)(\(i+j\ge k\)):

由于后面的 b 终止前,新的 a 产生的多余 ab 期望数都是一样的。

所以两期望的区别只有当前 a 相差 \(1\) 造成的期望 \(1\)。

即 \(f_{i+1,j}=f_{i,j}+1\)。

\[\because i+j\ge k \]

\[\therefore f_{i,j+i}=i+j \]

\[\therefore f_{i,j}=pa\times(f_{i,j}+1)+pb\times(i+j) \]

\[(1-pa)\times f_{i,j}=pa+pb\times(i+j) \]

\[pb\times f_{i,j}=pa+pb\times(i+j) \]

\[f_{i,j}=\dfrac{pa}{pb}+i+j \]

Code

#include<bits/stdc++.h>
using namespace std;
#define mo 1000000007
#define int long long
int k,a,b,pa,pb;
int f[1010][1010];
int po(int x,int y){
	int z=1;
	while(y){
		if(y%2) z*=x;
		x*=x;
		x%=mo,z%=mo;
		y/=2;
	}
	return z;
}
signed main(){
	cin>>k>>a>>b;
	pa=a*po(a+b,mo-2)%mo;
	pb=b*po(a+b,mo-2)%mo;
	for(int i=k;i>=1;i--){
		for(int j=k;j>=0;j--){
			if(i+j>=k){
				f[i][j]=pa*po(pb,mo-2)%mo+i+j;
				f[i][j]%=mo;
			}else{
				f[i][j]=f[i+1][j]*pa%mo+f[i][j+i]*pb%mo;
				f[i][j]%=mo;
			}
		}
	}
	cout<<f[1][0];
	return 0;
}

标签:infty,limits,题解,mo,times,pb,pa,Year,Arrangement
From: https://www.cnblogs.com/larryyu/p/18351911

相关文章

  • 【保奖思路】2024年华为杯研究生数学建模D题解题思路分享(点个关注,后续会更新
    您的点赞收藏是我继续更新的最大动力!一定要点击如下的卡片链接,那是获取资料的入口!点击链接加入群聊【2024华为杯研赛资料汇】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=MwNruKbEvR9aZns1l7xXBWmQQKYAEh-F&authKey=igaBN79pz6BhNlDQ6TIZ5YFAbn71aDcYL77uANPquLF%2FTVgeSAhE......
  • 【保奖思路】2024年华为杯研究生数学建模D题解题思路分享(点个关注,后续会更新
    您的点赞收藏是我继续更新的最大动力!一定要点击如下的卡片链接,那是获取资料的入口!点击链接加入群聊【2024华为杯研赛资料汇】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=MwNruKbEvR9aZns1l7xXBWmQQKYAEh-F&authKey=igaBN79pz6BhNlDQ6TIZ5YFAbn71aDcYL77uANPquLF%2FTVgeSAhE......
  • CF1984G Magic Trick II 题解
    前记第一篇黑题题解。难调。好写。码量不大。Description给定一个大小为nnn的排列pp......
  • AGC001 题解
    目录A-BBQEasyB-MysteriousLightC-ShortenDiameterA-BBQEasy先将\(2N\)个数排序,从大到小考虑,最大的数一定不会产生贡献,次大的数可以和最大的数捆绑在一起,并产生贡献,以此类推,这样的贪心正确性还是较为显然的。#include<bits/stdc++.h>#definelllonglongusin......
  • CF1999F.Expected Median 题解
    一.前言这是一道很有趣的数学题目,用到了逆元和组合数学,非常适合新手练手。二.题目大意:给出一个长度为\(n\)的\(01\)数组。找出所有长度为\(k\)的子序列的中位数,求出其和。妥妥的数学题~三.分析首先考虑对答案的贡献。很明显,只有\(1\)作为中位数时才会做出贡献,于是......
  • CF908G New Year and Original Order 题解
    CF908C定义\(S(n)\)为将\(n\)所有数位从小到大排序后得到的数,求\(\sum_{i=1}^{n}S(i)\)\(1\leqn\leq10^{700}\)看到这个题大部分人都会奔着数位\(dp\)的地方想但这个题的难度在于插入一个数后不好算贡献其实也挺好算的\(dp\)维护当前若干数字排完序......
  • CF641E Little Artem and Time Machine 题解
    题目传送门前置知识CDQ分治解法单点修改区间查询,但值域巨大,考虑离散化掉\(x\)。时刻\(t\)仍很大,考虑将其作为CDQ分治的第一维,然后套个CDQ分治即可,注意及时清空桶数组。代码CodeForces275382150#include<bits/stdc++.h>usingnamespacestd;#definelllonglon......
  • CF1209E2 Rotate Columns (hard version) 题解
    CF1209E2给定\(n\timesm\)的矩阵,可以对每一列进行若干次循环移位,求操作完成后每一行的最大值之和的最大值。\(1\leqn\leq12,1\leqm\leq2000\)这里\(m\)很大,但有一个很重要的性质这\(m\)列中只有最大的前\(n\)个会对答案产生贡献因此我们直接就把......
  • 【题解】ABC365(A~E)
    前四题30min切,然后T5死磕70min+几发小唐错,距离比赛结束还有16s交最后一发,AC了。目录A.LeapYear题目描述思路代码B.SecondBest题目描述思路代码C.TransportationExpenses题目描述思路代码D.AtCoderJanken3题目描述思路代码E.XorSigmaProblem题目描述思路代码A.Lea......
  • CF908E New Year and Entity Enumeration 题解
    CF908E给定\(m\),令\(M=2^m-1\)。给定\(\{0,1,\cdots,M\}\)的大小为\(n\)的子集\(T\),定义集合\(T\subseteqS\subseteq\{0,1,\cdots,M\}\)是好的当且仅当:\(a\inS\Rightarrowa\oplusM\inS\)\(a,b\inS\Rightarrowa\and\b\inS......