牛客多校04C :Computational Geometry Problem(p-Dyck路计数)
题意
给你 N,M,KN,M,KN,M,K,你需要统计满足条件的序列 [A1,A2,...,ANM][A_1,A_2,..., A_{NM}][A1,A2,...,ANM] 的个数。
条件:
- 在 [1,M][1,M][1,M] 中的每个整数恰好出现过 NNN次
- 不存在abab的形式,即要么一个数包含另外一个数,要么一个数与另外一个数最左最右出现位置的连线没有交集
- Ai=Ai+1A_i=A_{i+1}Ai=Ai+1的个数恰好为 KKK。
思路
这道题确实是一道比较难的数学题,因为题解写得看不懂,所以我让数学系的队友教我做了这道题。
首先是有 ttt 个峰,mmm 次下降的 p-Dyck 路的数量是
1m(mt)(pmt−1) \frac{1}{m}\binom{m}{t}\binom{pm}{t-1} m1(tm)(t−1pm)
这里解释一下什么是 p-Dyck 路。
上升步 U 指的是向量 (1,1)(1,1)(1,1),下降步 D 指的是 (1,−p)(1,-p)(1,−p),有一些定义是反过来的,但本质都是一样的,无非是从左往右看还是从右往左看罢了。
mmm 次下降就是指有 mmm 个 D,和 pmpmpm 个 U。峰就是指上升以后接着下降。
同时要求这个序列从原点出发任意前缀和都是在 xxx 轴的上方。
想要证明上面那一大坨组合数,还需要用到 Raney 引理:对于 a1,a2,...,ana_1,a_2,...,a_na1,a2,...,an,且 ∑i=1nai=1\sum_{i=1}^na_i=1∑i=1nai=1有且仅有一种移位方法(将左边若干个平移到最右边,并维持顺序不变)使得任何一个前缀和都 > 0。这非常显然,只需要画出折线,找到最右边的最小点作为开头即可。
为了能够运用 Raney 引理,需要多加一个 (1,1) 步,然后只需要令第一步走 (1,1) 就不会重复计数了。
因为限制了有且仅有 ttt 个峰,因此我们用 (mt)\binom{m}{t}(tm) 选择在哪 ttt个下降步前面安放上升步,注意后面可能会有几个多的下降步,这些并不会影响峰的个数。
然后就应该在每一个选择了的下降步前面放置上升步,显然至少放置一个,因此剩下了 pm+1−tpm+1-tpm+1−t 个上升步可以自由分配(注意已经多放了一个上升步)到 ttt 组,根据插板法可以得知方案数为 (pm+1−t+(t−1)t−1)\binom{pm+1-t+(t-1)}{t-1}(t−1pm+1−t+(t−1))。
然后就是把每一个下降步到上一个下降步之前的上升步看成独立的一块,记改变值为 aia_iai,然后就可以直接套用 Raney 定理了。
接下来就要思考怎么样让原题的条件和 p-Dyck 路建立双射。
首先,肯定是不去考虑数的顺序,只用考虑形成的结构,然后最后乘上 m!m!m! 即可。
注意原题中的值为大写字母,p-Dyck 路中的是小写字母。
先考虑 ppp 的取值,比较明显应该要取 N−1N-1N−1,因为空位刚好有 N−1N-1N−1 个。
在这一道题中,我把上升和下降的步反过来看,也就是上升的步为 (1,p)(1,p)(1,p),下降的步为 (1,−1)(1,-1)(1,−1),这样很明显和原来的条件是一样的。
如果只有一个数,那么形成的路应该为 UDD…D
如果让某一个数出现在这个数里面,那么应该如果出现第几个位置,就插在第几个 D 后面,比如N-1=4,就会是 UD(UDDDD)DDD,UDD(UDDDD)DD,UDDD(UDDDD)D 这样放置,这样我们就能清楚得到这个数插在哪个后面,而且可以确保如果插在某个数的中间可以使得峰的个数增加1。
既然插在中间的数会导致峰的个数增加1,那么并列的就不应该导致峰的增加,我想到的双射方法就是并列的有几个就先放几个U,然后后面就是一连串的D,然后在哪个D的后面插入U就能计算出是在哪一个数的哪一个位置插入的。
这种映射是双射的。
然后就可以得到:p=N−1,t=M(N−1)−K+1,m=Mp=N-1,t=M(N-1)-K+1,m=Mp=N−1,t=M(N−1)−K+1,m=M