問題はこちら
No.411 昇順昇順ソート - yukicoder
が昇順昇順列である
定義よりはそれぞれ昇順列であることに注意せよ
1~Nの置換である昇順昇順列のうち、であるものの個数を求めよ、という問題である
条件をみたすような昇順昇順列をとる
を満たすjをとり、とする
このとき明らかに次の(i)(ii)が成立する
(i) (∵)
(ii) (∵)
逆に(i)(ii)を満たすような集合Aを取れば、なる昇順昇順列がそれぞれ一意に定まる
(であることに注意する)
(i)を満たすような集合Aは個ある。この内(ii)も満たすものの考える
・のとき
なので(i)を満たせば(ii)は必ず成立する。よって通り
・のとき
(i)を満たすようなAであって(ii)を満たさないものはという形の時かつその時に限るので、aが1からNのN通り
よって通り
やるだけ
n; main(k){ scanf("%d%d",&n,&k); n=!printf("%d",(1<<n-k)-!~-k*n); }
63B
17/01/24追記
kは1以上なので!-~kは1/kと書き換えられ1B短縮
n; main(k){ scanf("%d%d",&n,&k); n=!printf("%d",(1<<n-k)-1/k*n); }
62B