以下のように考察できます。
まず、スカイレイ君が閲覧する投稿の数は、1回につき 件、これを 回行うため、 件です。
また、制約から同じ投稿を複数回閲覧することはありません。そのため、 件の投稿のうち、ちょうど
件の投稿が閲覧されます。
したがって、得られるドーパミンを最大にするには、 を降順に並べたときの上位 個の投稿を、
閲覧される位置に配置し、最後に配置されていない箇所に余った投稿を埋めればよいことが分かります。
例えば、入力例1
5 2 2 -1 2 6 4 -3 1 4
の場合、スカイレイ君が閲覧するのは投稿 です。
閲覧されるのは 件であるため、ドーパミンが大きい順に つを
下記のように閲覧される箇所に配置するように並び変えれば、得られるドーパミンを最大化できます。
6 4 -3 2 -1
ここで、閲覧箇所と、閲覧されない箇所それぞれで自由に並べ替えても、最も多くドーパミンを得られる投稿順であることに変わりはないことが分かります。
つまり、以下のような投稿順でも最も多くドーパミンを得ることができます。
-1 4 -3 6 2
このことから、答えの通り数は (閲覧箇所の並べ替えの通り数) (閲覧されない箇所の並べ替えの通り数)
であることがわかります。
制約から、 はすべて異なるため、最大のドーパミンを得るために閲覧される
個の投稿は一意に決まります。
よって、閲覧箇所の並べ替えの通り数は、 通り
閲覧されない箇所の並べ替えの通り数は、 通りです。
以上のことから、 で答えの通り数を求めることができます。
ここで、制約から、この値は非常に大きな数値になる場合があるため、問題文で指定されている通りに
で割った余りを求める必要があることに注意してください。
また、最大のドーパミンを求めるには、 を降順にソートして上位 個の総和を求めればよいです。
このためのソートがボトルネックとなり、計算量は です。
実は、計算式を見ると分かるように、答えの通り数を求めるうえで投稿順を自由に並べ替えられることを考えると、
具体的にどの位置が閲覧されるかは答えに影響しないため、スカイレイ君が閲覧する位置を無視してもよいことが分かります。