No.616 へんなソート
レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限
: 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 94
作問者 : tsutaj / テスター : はむこ
タグ : / 解いたユーザー数 94
作問者 : tsutaj / テスター : はむこ
問題文最終更新日: 2017-12-07 14:28:57
問題文
えびちゃんはソートの勉強をしています。ある日、「tsutaj ソート」という変なソートを見つけました。どうやら、だいたい昇順に並んでいる数列を高速に得るときに使うようです。
数列 $a$ を tsutaj ソートすると、必ず転倒数が $K$ 以下であるような数列 $a'$ が返ってきます。ここで転倒数とは、$i < j$ であって $a_i' > a_j'$ であるような組 $(i, j)$ の個数です。
えびちゃんは、tsutaj ソート後の数列が何通りあるか気になっています。与えられた数列を並び替えたもので、転倒数が $K$ 以下のものの総数を $1,000,000,007$ で割った余りを求めてください。
入力
$N$ $K$ $a_1$ $a_2$ $\dots$ $a_N$
入力は $2$ 行で与えられる。
$1$ 行目では、数列の長さ $N$、ソート後の数列の転倒数の上限 $K$ が与えられる。
$2$ 行目では、数列 $a$ が与えられる。$i$ 番目の要素は $a_i$ である。
制約
- $1 \leq N \leq 300$
- $0 \leq K \leq \frac{N(N-1)}{2}$
- $1 \leq a_i \leq 10^9$
- $a_i$ は相異なる。すなわち、 $i \neq j$ ならば $a_i \neq a_j$
出力
与えられた数列を並び替えたもので、転倒数が $K$ 以下のものの総数を $1,000,000,007$ で割った余りを $1$ 行に出力せよ。
サンプル
サンプル1
入力
3 1 1 2 3
出力
3
条件を満たす数列は $3$ 通りあります。
-
1 2 3
(転倒数 $0$) -
1 3 2
(転倒数 $1$) -
2 1 3
(転倒数 $1$)
サンプル2
入力
5 7 1 4 5 8 2
出力
106
サンプル3
入力
13 78 3 1 4 15 9 2 6 5 35 89 7 93 23
出力
227020758
$1,000,000,007$ で割った余りを出力することに注意してください。
提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。