2025年3月8日土曜日

yukicoder contest 459

 ABの二完。Cを考えているうちに寝てしまった。Cは一応自力で解けたけど、寝なかったら解き終っていたかというと微妙なところ。


No.3050 Prefix Removal

 自力AC。

 もし、Aの要素全てを使い切るとすると、満足度の変化は、

・最初の操作で全てのiに対して+A[i]
・選ぶpより大きい全てのiに対して+A[i]

 のようになる。
 これを最大化するためには、Aの後ろからの累積和を取って、大きい方から選んでいけば良い。ただし、最初に0を必ず選ばなくてはいけないことに注意。

 ここまで分かったら、後はAのうち何個使うか? という部分。
 これがなかなか思いつかなかったのだが、heapqを使えば全探索できることに気付いた。やや思いつきにくいし面倒ではあるけれど、何度もしたことがある方法だった。

 上手くやれば全探索できるのでは? と考えてみなくてはいけないねぇ。

 

No.3051 Make All Divisible

 テストケースは見たけど、一応自分で考えてAC。

 まず、

・sum(A)がkで割り切れる
・max(A)<=sum(A)/k

 のとき、この操作で全てを0にすることが可能(ということは考えているうちに思い出した)。

 なので、各A_iをA_i%kに置き換えた数列でこの条件を満たせば一番良い。

 そして、満たさない時は、現在のAの中で最も小さい数で、かつ、+kしても最初のAの値以下であるようなものに+kして、条件を満たすかを見ていく。

 計算量は分からなかったが、この方法でACできた。


 




0 件のコメント:

コメントを投稿