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

CF908D New Year and Arbitrary Arrangement 题解

时间:2023-10-12 19:22:32浏览次数:48  
标签:dfrac limits int 题解 sum times Year Arrangement mod

New Year and Arbitrary Arrangement

思路:

期望题果然还是恶心呀!

我们设 \(f[i][j]\) 表示当串中有 \(i\) 个 \(a\) 和 \(j\) 个 \(ab\) 时的方案数。为了方便,设 \(A=\dfrac{P_a}{P_a+P_b},B=\dfrac{P_b}{P_a+P_b}\)。

显然,可以这样转移:

\[f[i][j]=f[i+1][j]\times A+f[i][i+j]\times B \]

因为,如果串后面加上一个 \(a\),概率是 \(A\),并且加完后唯一的影响就是 \(i+1\);如果加入一个 \(b\),概率是 \(B\),加完后前面每一个 \(a\) 都会与这个 \(b\) 形成一对 \(ab\)。

那么边界条件呢?

显然,当 \(i+j\geq k\) 时,只要再往后面加入一个 \(b\),过程就停止了。

则这个的期望长度应该是:

\[B\times \sum\limits_{a=0}^{\infty}(i+j+a)\times A^a \]

其中,枚举的这个 \(a\) 是在终于搞出一个 \(b\) 前,所刷出的 \(a\) 的数量。

为了方便,我们设 \(i+j=c\),并用 \(i\) 替换 \(a\)。即:

\[B\times \sum\limits_{i=0}^{\infty}(c+i)\times A^i \]

因为 \(A+B=1\),我们可以用 \((1-A)\) 代 \(B\)。

即:

\[(1-A)\times \sum\limits_{i=0}^{\infty}(c+i)\times A^i \]

拆开括号得:

\[\sum\limits_{i=0}^{\infty}(c+i)\times A^i-\sum\limits_{i=0}^{\infty}(c+i)\times A^{i+1} \]

一上来直接 \(\infty\) 有些不直观,我们用 \(n\) 替换掉:

\[\sum\limits_{i=0}^n(c+i)\times A^i-\sum\limits_{i=0}^n(c+i)\times A^{i+1} \]

在第二个式子里面用 \(i+1\) 代掉 \(i\):

\[\sum\limits_{i=0}^n(c+i)\times A^i-\sum\limits_{i=1}^{n+1}(c+i-1)\times A^i \]

将第一个 \(\Sigma\) 中 \(i=0\) 的情况和第二个 \(\Sigma\) 中 \(i=n+1\) 的情况分别提出:

\[c+\sum\limits_{i=1}^n(c+i)\times A^i-\sum\limits_{i=1}^n(c+i-1)\times A^i-(c+n)\times A^{n+1} \]

合并两个 \(\Sigma\):

\[c+\sum\limits_{i=1}^nA^i-(c+n)\times A^{n+1} \]

套等比数列求和公式,注意要先提出一个 \(A\) 使首项为为一。

\[c+A\times \dfrac{1-A^n}{1-A}-(c+n)\times A^{n+1} \]

注意到 \(1-A=B\):

\[c+A\times \dfrac{1-A^n}{B}-(c+n)\times A^{n+1} \]

现在,考虑 \(n\rightarrow\infty\) 的情况,即:

\[\lim\limits_{n\rightarrow\infty}c+A*\dfrac{1-A^n}{B}-(c+n)*A^{n+1} \]

注意到 \(0<A<1\),因此
\(\lim\limits_{n\rightarrow\infty}A^n=0\) 带入发现:

\[c+A\times \dfrac{1-0}{B}-(c+n)\times 0 \]

处理一下 \(c+\dfrac{A}{B}\) 注意到我们一开始的定义了吗?

\[A=\dfrac{P_a}{P_a+P_b},B=\dfrac{P_b}{P_a+P_b} \]

以及 \(c=i+j\) 代入得:

\[i+j+\dfrac{P_a}{P_b} \]

也就是说,边界条件就是 \(f[i][j]=i+j+\dfrac{P_a}{P_b}(i+j\geq k)\)!!!

再搬出我们一开始的转移式:

\[f[i][j]=f[i+1][j]\times A+f[i][i+j]\times B \]

完事。

哦,另外,还要思考一下答案到底是 \(f[0][0]\) 还是 \(f[1][0]\)。

因为一开始的那些 \(b\),无论来多少个都是没用的,因此不如直接从 \(f[1][0]\) 开始。事实上,你如果把转移式代回去或者打个表的话,你会发现就有 \(f[0][0]=f[1][0]\)。

复杂度 \(O(k^2+\log mod)\)。

代码:

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod=1e9+7;
const int N=1e3+100;
int n,a,b,c,A,B;
int f[N][N];
int ksm(int x,int y){
    int z=1;
    for(;y;(x*=x)%=mod,y>>=1) if(y&1) (z*=x)%=mod;
    return z;
}
int dfs(int x,int y){
    if(x+y>=n) return x+y+c;
    if(f[x][y]!=-1) return f[x][y];
    int &res=f[x][y];
	res=0;
    (res+=dfs(x+1,y)*A%mod)%=mod;
    (res+=dfs(x,x+y)*B%mod)%=mod;
    return res;
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
    cin>>n>>a>>b;
	memset(f,-1,sizeof(f));
	A=a*ksm(a+b,mod-2)%mod;
	B=b*ksm(a+b,mod-2)%mod;
	c=a*ksm(b,mod-2)%mod;
    cout<<dfs(1,0);
    return 0;
}

标签:dfrac,limits,int,题解,sum,times,Year,Arrangement,mod
From: https://www.cnblogs.com/xuantianhao/p/17760343.html

相关文章

  • CF264B Good Sequences 题解
    GoodSequences状态很显然,设\(f[i]\)表示位置\(i\)的最长长度。关键是转移,暴力转移是\(O(n^2)\)的,我们必须找到一个更优秀的转移。因为一个数的质因子数量是\(O(\logn)\)的,而只有和这个数具有相同质因子的数是可以转移的;因此我们可以对于每个质数\(p\),设一个\(mx_p......
  • 题解 AtCoder wtf22_day1_b【Non-Overlapping Swaps】
    题解AtCoderwtf22_day1_b【Non-OverlappingSwaps】problem给定一个排列,要求交换最多\(n-1\)对元素,使得这个排列变成[1,2,...,n]的有序排列。当然没有那么简单,对于交换还是有限制的,对于相邻的两次交换,不妨叫做\((l_i,r_i)\)和\((l_{i+1},r_{i+1})\),必须满足这两个交......
  • 题解 CF486D Valid Sets
    题目链接相当牛逼。这种找数量的题型,确定树形\(dp\)没跑了。首先思考常规树形\(dp\),不难想到设\(f_{u,a,b}\)表示以\(u\)为根节点的子树内(包括点\(u\)),最大值是\(a\),最小值是\(b\)的连通子图数量,转移很容易,但是这样时间空间复杂度是\(\rmO(n^3)\),而且无论是状态上......
  • Debian12安装elasticsearch实践及问题解决方案
    一、安装安装其实很简单,直接上官网链接:下载地址,官网提供了所有安装方式,总一款适合你。我的目标系统是Debian12,包管理是apt-get,所以就以这个为示例,仅供参考。1、先选择需要安装的版本2、导入ElasticsearchPGP密钥wget-qO-https://artifacts.elastic.co/GPG-KEY-elastic......
  • 原创题题解
    实时更新。众所周知的,原创题就是即原神又创人的题。当然有的题不会放,等考了在放。波特问题描述流水线上有\(n\)个波特,每个波特有一个工作效能\(a_i\)。对于每一个波特,当它遇到一个工件时,它会对其进行加工,耗费\(1\)个单位时间,然后把它传递给它前面中工作效能最大的波特,......
  • #9134. 翻转硬币 题解
    首先考虑一些简单的情况,比如\(m=1\)。容易发现操作1和操作2的顺序不会影响结果,于是可以钦定所有操作1在操作2之前。并且可以发现,进行完所有1后2的次数即为\((\text{连续段个数}-1)\)。然后考虑将\(m>1\)的情况。显然最后序列上每\(m\)长度分一段,则每一段都相......
  • [CF1098E] Fedya the Potter 题解
    [CF1098E]FedyathePotter题解前言一道类欧好题。题解这道题让求\(c\)数组的中位数,那么有一个比较套路的方法就是二分答案\(mid\)然后计算\(b\)数组中区间和小于\(mid\)的区间个数进行\(check\)。但是\(b\)数组总共有\(\mathcal{O}(n^2)\)项,考虑如何优化。因......
  • [ABC245G] Foreign Friends 题解
    [ABC245G]ForeignFriends题解想法考虑所有颜色相同的弱化版。这种情况下,只需要把所有特殊点都推入队列之后跑多源Dijkstra即可。思路正解与上述做法大致相同。如果有颜色限制,那么可以考虑这个神仙思路:把所有特殊点的颜色用二进制表示,对于每一位,这一位是\(0\)的特殊......
  • CF882E1+CF1882E2 Two Permutations 题解-构造题
    CF882E1+CF1882E2TwoPermutations题解-构造题哇,人类智慧,太智慧了。。。此题作为20231010联考的T3。感觉赛时根本没有去往这方面想。CF1882E1CF1882E2E1是简单版,就是没有要求操作数最小化。E1-EasyVersion方法1首先考虑没有次数限制的,对于单独的每一个串的情况。......
  • [USACO17JAN] Promotion Counting P 题解
    [USACO17JAN]PromotionCountingP题解前言好久没写题解了,今天趁我心情好赶紧水一篇。思路首先拿到这题,关键词检索:子树,比\(p_i\)大的,树状数组!现在考虑如何去掉其他子树的贡献……emm,我直接在算贡献的时候去掉其他子树的贡献不就好了!当然,暴力去贡献复杂度肯定爆炸,这里考虑......