Codeforces 960G. Bandit Blues】的更多相关文章

Description 你需要构造一个长度为 \(n\) 的排列 , 使得一个数作为前缀最大值的次数为 \(A\) , 作为后缀最大值的次数为 \(B\) , 求满足要求的排列个数 . 题面 Solution 同 \(FJOI\) 建筑师 . 从 \(n\) 到 \(1\) 依次加入 , 对于 \(n\) ,对 \(A,B\) 的出现次数都会贡献 \(1\) . 剩下的数 , 如果放在左边则对 \(A\) 有贡献 , 放在右边则对 \(B\) 有贡献 , 放在中间则没有贡献 . 我们从组合意义上…
考虑转化题意,我们发现其实就是找一个长度为\(n\)的全排列,使得这个排列有\(A\)个前缀最大值,\(B\)个后缀最大值,求方案数 我们考虑把最大值拎出来单独考虑,同时定义一些数的顺序排列为单调块(随便取的名字) 考虑在这个最大值左边有\(A-1\)个单调块,右边有\(B-1\)个单调块,如果这些块在左右两边按序排好的话就是一种合法方案 那我们只需要找出\(A+B-2\)个单调块,并且将其中拿出\(A-1\)个放在左边,因此答案有一项就是\(C_{A+B-2}^{A-1}\) 考虑怎么从除了最…
[CF960G]Bandit Blues(第一类斯特林数,FFT) 题面 洛谷 CF 求前缀最大值有\(a\)个,后缀最大值有\(b\)个的长度为\(n\)的排列个数. 题解 完完全全就是[FJOI]建筑师的加强版本. 显然每一个前缀最大值和一段连续的区间构成了一个环排列,显然每个前缀最大值就是这个环中的最大值.而全局最大值一定把前后缀最大值分开. 所以答案考虑除最大值外,左侧需要\(a-1\)个前缀最大值,右侧需要\(b-1\)个前缀最大值.也就是一共要\(a+b-2\)个环,那么这一部分的贡…
[CF960G]Bandit Blues 题面 洛谷 题解 思路和这道题一模一样,这里仅仅阐述优化的方法. 看看答案是什么: \[ Ans=C(a+b-2,a-1)\centerdot s(n-1,a+b-2) \] 组合数我们已经可以\(O(N)\)求了,主要是第一类斯特林数存在问题. 考虑它的转移: \[ s(n,m)=s(n-1,m-1)+(n-1)*s(n-1,m) \] 根据这个转移,我们写出它\(n\)固定时的生成函数 \[ G(x)=\prod_{i=0}^{n-1}(x+i) \…
题意:求满足条件的排列,1:从左往右会遇到a个比当前数大的数,(每次遇到更大的数会更换当前数)2.从右往左会遇到b个比当前数大的数. 题解:1-n的排列,n肯定是从左往右和从右往左的最后一个数. 考虑\(S(n,m)\)是1-n排列中从左往右会遇到m个比当前数大的数,考虑把1放在最左边,即\(S(n-1,m-1)\),考虑1不在最左边,有n-1个位置,1不可能会更换\((n-1)*S(n,m)\).即\(S(n,m)=S(n-1,m-1)+(n-1)*S(n-1,m)\) \(S(n,m)\)即…
题目传送门 https://codeforces.com/contest/960/problem/G 题解 首先整个排列的最大值一定是 \(A\) 个前缀最大值的最后一个,也是 \(B\) 个后缀最大值的最后一个. 那么枚举一下最大值的位置为 \(i\),那么左右两边各选一些数的方案数为 \(\binom {n-1}{i-1}\). 然后,左边有 \(i-1\) 个数,要分成 \(A-1\) 个部分,每一个部分的第一个数是所有数中最大的,并且每一个部分之间的最大值要递增. 可以发现这个问题等价于…
题目链接:codeforces960G 来看看三倍经验:hdu4372 luogu4609 某蒟蒻的关于第一类斯特林数的一点理解QAQ:https://www.cnblogs.com/zhou2003/p/10780832.html 注意到当前序列的最大值会对前缀最大值和后缀最大值均产生\(1\)的贡献 那么当我们去掉这个最大值后,剩下\(n-1\)个元素,需要产生\(a-1\)个前缀最大值和\(b-1\)个后缀最大值,并且它们的位置会以最大值为界限分布在两侧 我们将剩下的\(n-1\)个元素分…
题意 给你三个正整数 \(n,a,b\),定义 \(A\) 为一个排列中是前缀最大值的数的个数,定义 \(B\) 为一个排列中是后缀最大值的数的个数,求长度为 \(n\) 的排列中满足 \(A = a\) 且 \(B = b\) 的排列个数.\(n \le 10^5\),答案对 \(998244353\) 取模. Sol 首先可以设一个 \(DP\) 状态 \(f(i,j)\) 表示,长度为 \(i\) 的排列,有 \(j\) 个前缀最大值的方案数. 那么转移就是枚举新放一个最小值,只有放在序列…
传送门 弱化版:FJOI2016 建筑师 由上面一题得到我们需要求的是\(\begin{bmatrix} N - 1 \\ A + B - 2 \end{bmatrix} \times \binom {A+B-2} {A - 1}\) 注意到这题的复杂度瓶颈是求第一类斯特林数,因为求组合数可以\(O(N)\),但是暂时我们求第一类斯特林数只有\(O(N^2)\)的方法 考虑第一类斯特林数的转移式子:\(\begin{bmatrix} a \\ b \end{bmatrix} = \begin{b…
题目大意: 求满足比之前的任何数小的有A个,比之后的任何数小的有B个的长度为n的排列个数. 题目分析: 首先写出递推式,设s(n,k)表示长度为n的排列,比之前的数小的数有k个. 我们假设新加入的数为1,那么s(n,k)=s(n-1,k-1)+(n-1)*s(n,k). 这个式子是第一类斯特林数的递推式. 用h(n,a,b)表示满足题目给出条件的排列个数. 得出h(n,a,b)=Σs(k,a-1)*s(n-k-1,b-1)*C(n-1,k).直观的理解就是将原排列从最高点分成两部分,两部分分别组…