2021年10月30日土曜日

HackerEarth - Connected Permutations

求める数をana_nとする。長さnnの順列を先頭kk要素が1,2,...,k1, 2, ..., kの順列であるような最小のkkで分類して数えると、それぞれak(nk)!a_k(n-k)!通りある。長さnnの順列から長さn+1n+1の順列を作ることを考えると、n+1n+1kk箇所に挿入可能なのでan+1=k=1nkak(nk)!=k=0nkak(nk)!a_{n+1} =\sum_{k=1}^{n}ka_k(n-k)! = \sum_{k=0}^nka_k(n-k)!a0=0,a1=1a_0=0, a_1=1としてオンラインFFTするとO(Nlog2N){O}(N \log^2 N)で解ける。