競プロ日和

競技プログラミングを楽しむ

キーエンス プログラミング コンテスト 2019 C - Exam and Wizard

問題

解けなかった。

ヒープを使うのかと思い考えてみたが、解法が思いつかなかった。

解答PDFと動画を見て解き方を理解した。

まず、AよりもBが大きい場合は答えが存在しないため、-1を出力。

次に、配列A-Bの要素のパターンは3つ。

①マイナス(minus) : A < B

②0 : A == B

③プラス(plus) : A > B

このうち、②の0は無視し、①をminus配列に、③をplus配列に入れる。

minusは必ず変更するため、minusの個数をansに格納。

そうすると、plusからいくつの要素を変更するか、が要点となる。

結局、(minusの個数) + (変更したplusの個数) が答え。

pythonコード