ABC344感想

D問題 String Bags

D - String Bags

文字列の入った袋を番号順に見ていって、中から1つだけ取り出して末尾に追加or何もしないをしていって目標の文字列にできるか?みたいな感じ。制約が優しいのでDPすればOK......なのだが3ペナもつけてしまった。

遷移の書き方が甘かったのが原因で、袋から2つ以上同時に取り出すことも可能になってしまっていた。

 

E問題 Insert or Erase

E - Insert or Erase

文字列に文字を挿入したり削除したりする。連結リストでOK。

これも2ペナ。まあ1ペナまでは許せる(?)けど2ペナはちょっと...

手元での確認をもっとちゃんとやるべきだった。あるいはライブラリ化しておけば良かった...?(でも連結リストとか滅多に使わないからなあ...)

 

F問題 Earn to Advance

F - Earn to Advance

N*Nのグリッドがあって、それぞれ1ターンで稼げる金額・右への通行料・下への通行料が決まっている。最初所持金0の状態で左上にいるとき、最短何ターンで右下まで到達できるか?Nは最大80。

「お金が足りなくなったらやっぱり前に通ったマスで稼いでいたことにする」みたいなことを解禁しても答えは変わらないので、そうすると[今いるマス][今までに通ったマスの稼ぎパワーの最大]を状態に持てば解けそう。ただ、「ターン数が最短だけど所持金少ない」vs「ターン数が最短+1だけど所持金多い」の優劣をつけられるのか?という点で結構悩んだ。結論から言うとこれは前者の方が優れている。(厳密なのは公式解説に任せるとして雑に言うと)前者の方は1ターン追加すれば後者の所持金を上回れるから。

解法を出すまではまあ良かったが、デバッグでめちゃくちゃ手間取ってしまった。9ペナらしいです(は?)。結局原因はかなりしょうもないtypoだったんだけど、こういうときのデバッグ技術がかなり未熟だな~という気持ちに(真面目にやるなら愚直をDFSとかで実装してランダムケースと比較?しかしコンテスト中はそこまでやる気力がなく...)

感想

競プロやらなすぎて筋力が落ちてるな~という感想。最近結構レート溶かしているのでなんとかしたくはある。

ただまあいきなりモチベ生やして練習量増やすのも難しい(?)ので、効率の良いデバッグ方法を調べるとかの方がよいかもしれない。ojでランダムケース作るとか...?