本文主要讨论的是从 $(0,0)$ 至 $(n,m)$ 每次仅能向上或向右移动一格,问不碰到 $y=x+a_1,y=x+a_2$ 两条直线的方案数。
环
题意
有多少个长度为 $2n$ 的序列 $a$ 满足,$forall i,a_iin[1,m]$ 且相邻两个数差恰好为 $1$ ,其中 $1$ 与 $2n$ 相邻。
对于 $kin[1,n]$ 均求出当 $n=k$ 时的答案。
$1leq n,mleq 10^5$ 。
题解
将问题转化成网格图上即为从 $(0,i)$ 走到 $(2n,i)$ ,每次只能往右上 $(+1,+1)$ 或左上 $(+1,-1)$ 移动一次,且不能碰到 $y=0/y=m+1$ 直线。答案即为 $iin[1,m]$ 的总和。
如果说限制直线只有一条那么直接按照类似卡特兰数的计算方法计算,但是两条的就需要多考虑一些情况。
设若折线碰到 $y=0$ 记为 $A$ ,碰到 $y=m+1$ 记为 $B$ ,那么普通计算方式可以计算出存在 $A$ 或 $B$ 的情况,例如从 $(0,i)$ 经过 $y=0$ 最后到 $(2n,i)$ 的方案数为 $dbinom{2n}{n+i}$ 。
可以发现这是一个容斥问题,我们将 $AAABBA$ 若看成 $ABA$ 这样进行缩点那么答案即为 $sum_{Q} (-1)^{|Q|} Cnt(Q)$ ,其中 $Q$ 表示一个 $A,B$ 交替的序列。
正确性很好理解,对于一个不合法方案,例如 $ABA$ 可以看成 $A/B/AB/BA/ABA$ ,其中带权为 $+1-1-1+1+1-1=0$ ,$AB$ 可以的权看成 $+1-1-1+1=0$ 。
那么我们只需要计算 $sum_Q (-1)^{|Q|} Cnt(Q)$ 。
若 $Q=varnothing$ ,则即为从 $(0,i)$ 至 $(2n,i)$ ,总方案数为 $dbinom{2n}{n} imes m$
若 $Q={A}$ ,则我们看成对 $y=0$ 对称,即为 $(0,i)$ 至 $(2n,-i)$ ,总方案数为 $2cdot sum_{i=1}^m dbinom{2n}{n+i}$,乘 $2$ 因为对称性 $Q={B}$ 与其对称。
若 $Q={AB}$ ,则我们按照 $Q={A}$ 类似翻折两次 (我的翻折比较奇怪第一次按照 $y=0$ 翻,第二次按照 $y=-m-1$ 翻。其实先按照 $y=0$ 翻在按照 $y=m+1$ 翻即可,但还未找到此双射) ,那么即为 $(0,i) ightarrow (2n,i-2m-2)$ ,总方案数为 $2cdot dbinom{2n}{n+m+1} imes m$ 。
update:双射找到了。考虑若先对于 $A$ 翻在对 $B$ 翻,那么等价于经过 $BA$ 的折线。构造也很简单,将第一次碰到 $B$ 后的翻折,那么就可以规约到 $ A$ 的子问题。类似的,若当前处理 $Q$ ,那么可以归约到 $Q’$ ,仅需要删除 $Q$ 的最后一个元素即可。
观察发现,$n ightarrow n+m+1 ightarrow n+2m+2 ightarrow…$ $|Q|$ 为偶数均为 $m+1$ 的等差数列,奇数也如此,证明可以考虑归纳或考虑 $y$ 的变化量 。
那么我们把 $2cdot sum_{i=1}^m dbinom{2n}{n+i}$ 改写成 $sum_{i=1}^m dbinom{2n}{n+i}+dbinom{2n}{n-i}$ ,其余的也类似。
由于组合数上面均为 $2n$ ,那么我们只要看下标的系数。
可以发现,当 $iequiv npmod {m+1}$ 使,系数时 $m$ ,否则为 $-1$ 。
那么方案数可以写成 $sum_{iequiv npmod{m+1}} dbinom{2n}{i}cdot (m+1)-2^{2n}$ 。
若暴力计算时间复杂度为 $mathcal O(dfrac{n^2}{m})$ ,在 $m$ 较大时可以过掉,取分界 $sqrt{n}$ ,那么当前只要考虑 $mleq sqrt{n}$ 的情况。
这种情况也很简单,我们维护 $f_i$ 为一个 $m$ 次多项式,$[x^j] f_i$ 表示 $sum_{jpmod {m+1}}dbinom{2i}{j}$ ,$f_{i+1}$ 相当于把组合数杨辉三角一下。
时间复杂度 $mathcal O(nm)$ ,则总时间复杂度为 $mathcal O(nsqrt{n})$ 。
http://zhengruioi.com/submission/309533
JLOI2015 骗我呢
题意
给定 $n,m$ ,求有多少个 $n imes m$ 的矩形 $x$ 满足
$x_{i,j}<x_{i,j+1}$
$x_{i,j}<x_{i-1,j+1}$
$0leq x_{i,j}leq m$
$1leq m,nleq 10^6$ ,答案对 $10^9+7$ 取膜。
题解
第一个条件告诉我们一行中的数是单调递增的,而第三个条件刻画了值域在 $[0,m]$ ,所以一行内只会缺失一个数,其余数从小到大排列。
那么我们可以通过缺失元素以及第二个条件构造矩形。
舍当前缺失元素为 $k$ ,则当前行为 $0,1,…,k-1,k+1,k+2,…,m$ 。
而 $x_{i,j}<x_{i-1,j+1}$ ,那么下一行为 $0,1,…,k-2,[k-1,k],[k,k+1],…,[m-1,m]$ ,其中 $[x,y]$ 代表可以选择的数在 $[x,y]$ 之间。
那么若当前缺失元素为 $k$ ,那么下一行缺失元素可能为 $[k-1,m]$ 。
则设 $f_{i,j}$ 表示当前在第 $i$ 行,缺失元素为 $j$ 时的前 $i$ 行情况。
$$f_{i,j}=sum_{k=j+1}^m f_{i-1,k}=f_{i,j-1}+f_{i-1,j+1}$$
那么就得到一个 $mathcal O(nm)$ 的做法了。
考虑将这个式子放到坐标系内,那么问题变为了从 $(0,0)$ 走到 $(n+1,m) $ 的方案数,其中每一步能往上或右下(当 $y=0$ 时向右)。
将 $x+y$ 相同的归为一列重新看这个转移,并 $f_{i-1,0} ightarrow f_{i,0}$ 的转移由于方向为右看成先向上再往右,那么该图不存在斜方向移动的位置。
那么问题变为了求从 $(0,0) ightarrow (n+m+1,n)$ ,且不能经过 $y=x+1,y=x-m-2$ 直线的方案数。
按上题类似做法做即可。
时间复杂度 $mathcal O(n+m)$ 。
https://loj.ac/s/1063915