Official
E - ZigZag Break Editorial by maroonrk_admin
一般性を失わずに,\(P_1 < P_N\) の時を考えます.
まず,\(P\) が一つ与えられたときに条件を満たすかどうかを考えます.このとき,以下が必要十分であるとわかります.
- ある \(1 \leq i \leq N-1\) が存在し,\(P_i \leq P_1\),\(P_{i+1} \geq P_N\)
証明は帰納法でできます.
上記の条件を満たす \(i\) が存在しないような順列 \(P\) の個数を数えます.
\(P_N=A+k\) とおきます.このとき,\(k \geq 2\) であることがまず必要です. 次の手順で \(P\) を構成することを考えます.
- まず,列 \(P=(A,A+k)\) がある.
- \(A+1\) から \(A+k-1\) までの値を \(P\) に挿入する.これは \((k-1)!\) 通りの方法が存在する.
- \(1\) から \(A-1\) までの値を \(P\) に挿入する.このうち \(i\) 番目(\(1 \leq i \leq A-1\))の値を挿入する際,位置の候補は \(k-2+i\) 個ある.
- \(A+k+1\) から \(N\) までの値を \(P\) に挿入する.このうち \(i\) 番目(\(1 \leq i \leq N-(A+k)\))の値を挿入する際,位置の候補は \(k-2+i\) 個ある.
これらをまとめると,\((A+k-3)!(N-A-2)!(k-1)/(k-2)!\) になります. よって,求めるべき式は,\(\sum_{2 \leq k \leq N-A}(A+k-3)!(N-A-2)!(k-1)/(k-2)!\) です. これは \((N-A-2)!(A-1)! \sum_{0 \leq k \leq N-A-2} {A+k-1 \choose k}(k+1)\) と変形できます.また,\({A+k-1 \choose k} k=A {A+k-1 \choose k-1}\) を用いて,\(\sum\) を定数個のコンビネーションの式に帰着できます. よって\(O(1)\) でこの問題は解けます.
posted:
last update: