2025年1月23日木曜日

Codeforces Round 998 (Div. 3)

 Eまで。Div. 3なのにFから難しい……。


F. Multiplicative Arrays

 こたつがめさんの放送の振り返りを見てAC。理解した後でも難しい気がするが……。

 二項係数でどうにかする問題というのは分かるが、そこで止まってしまった。

 たとえば、k=6でn=4のときの場合の数は、2を入れる位置と3を入れる位置を考えて、4*4となる。なので、n以下のを足し合わせる場合、4*4+3*3+2*2+1*1=30となる。

 ……のように考えて、上手くいかなかった。


 このように考えるのではなく、数字を入れる箇所を何個にするか? と考えると二項係数の和になり高速化できる。
 先程の6の場合だと、[6], [2, 3], [3, 2]の三通りがある。

 [2, 3]の順で入れるとすると、Combi(4, 2)通り。n=3, 2, 1の場合を考えると、Combi(3, 2), Combi(2, 2), 0通りとなり、その和は(公式により)Combi(5, 2)と計算できる。

 単純に素因数分解するのではなく、何をどういう順番で掛け合わせてkにしたか? と考えなくてはいけなかった。

0 件のコメント:

コメントを投稿