TopCoder SRM 636 Hard
2017-02-26 |
[Competitive programming]
概要
数列 S に対して,i < j かつ S[i] < S[j] を満たす組 (i, j) の個数を sortedness と呼ぶ.
1~N の permutation のうち何箇所か (14 箇所以下) の値が消されてわからなくなっている.
わからなくなっている箇所を適当に補って,sortedness を与えられた値に等しくする方法は何通りあるか?
解法
消されている数を,小さい方半分と大きい方半分に分ける.それぞれの集合を L, R とする.
L の要素を入れる場所を決めると (最大 C(14, 7) 通り),L の要素と R の要素の組によって生じる sortedness の値は一意に定まることに注意する.
なので,L の要素を入れる場所を決めたときに,その中で L の順番を入れ替えて得られる sortedness (L の要素同士 / L の要素と既存の数 によって生じるものたち) としてあり得るものを全部列挙しておき,
R についても同様のことをすると,L について得られた sortedness と結びつくべき R の位置 / sortedness は一意に決まるので,わりと速く解ける.
コード