2025年3月7日金曜日

Codeforces Round 997 (Div. 2)

 Cまで三完。


D. Unique Median

 こたつがめさんの放送の振り返りを見てAC。アイディアは自然だが難しい。解法を理解するまでに、三回放送を見返した。

 コンテスト中は、中央値が1~10それぞれになるときに、場合の数を求めるという方針を考えていた。
 中央値がaのとき、aを0、a未満の数を-1、aより大きい数を1としたとき、(1の個数と-1の個数の差)が(0の個数)/2切り捨て以下になれば良い、というところまでは分かったが、数え上げに持っていけず。

 そうではなく、k以下で-1、kより大きいとき+1として、累積和を取らなくてはいけなかった。
 こうすると、区間和が0のとき、k以下のものの個数とkより大きいものの個数が等しくなるため、goodでない配列の個数を求められそう。(Zero-Sum Ranges系の処理ですね)
 これに加えて、「kが中央値になるため区間内にkが存在する」という条件が必要になる。これは二分探索で処理できる。


0 件のコメント:

コメントを投稿