AtCoder Beginner Contest 282 G問題 Similar Permutation
問題
提出解答
問題の概要
の順列の組 のうち, 以下で定義される類似度が であるような組の数 (を で割った余り) を求めよ.
- において, となる整数 の個数
制約
- は素数
解法
動的計画法で解く. に対して, ] を以下で定義する.
- の第 項まで見たとき, 以上 以下の整数で に登場せず, 未満の整数が 個, 以上 以下の整数で に登場せず, 未満の整数が 個であるような組の個数
ベースケースは のときで, この時点での類似度は であり, また, としては 以上 以下の整数をそれぞれ任意に指定できるので,
である.
更新式を考える. そもそも, であるための必要十分条件は, と , と の大小関係が一致していることである *1.
について着目する. から になったとき,
- ならば,
- ならば,
である. これにより, と の大小関係の関係性がわかった. 同様にして, と の大小関係の関係も分かる.
よって, 更新式は
となる.
そして, 最終解答は ] である.
このとき, 要素数が 個, 遷移が各要素について 時間かかり, 全体で 時間かかってしまい, 間に合わない.
しかし, 各シグマの取る範囲に着目してみると, に関するある区間の直積 (の直和) になっていることに着目すると, 各 ] について 次元の累積和を作成することで, 遷移の計算を 時間に削減することができる. この工夫により, 計算時間を 時間に削減することができた.
*1:順列なので, 等号成立はありえない