れとろのメモ置場

とあるSEのメモ置場

AtCoder Beginner Contest212

AtCoder Beginner Contest212に参加しました。

結果

A,B,C問題の3問正解でパフォーマンスが548でした。 B問題の問題文を誤解しててそこそこ時間を無駄にしてしまった…
あと最近気づいたけど、金曜の夜に夜更しすぎて睡眠時間が足りてないと、コンテスト中は頭の回転が鈍ってパフォーマンスが低くなりがちな気がする。翌日休みでも早く寝ないとなあ…

A - Alloy

問題文の通りif文で処理する。 if文の練習問題かな。

B - Weak Password

入力された暗証番号が以下を満たしていないことを確認する。入力は文字列として受け取り1桁ずつ数字に変換して処理する。

  • 全部同じ数じゃない
  • i桁目とi+1桁目が連続した数になっていない

解いている時は2つ目の条件の意味がわかっていなくてサンプル2がなぜStrongになるのかしばらく考えてた。
任意って好きなものを適当に選んでくらいの意味に思ってたので、サンプル2の1桁目と2桁目が連番になっているから条件満たさないとずっと思ってた。「任意のXX」って「全てのXX」と同じ意味らしい。ずっと間違って認識してた…

C - Min Difference

A _ {i}とB _ {j}全ての組み合わせの中で  |A _ {i} - B _ {j}|の最小値を求める問題。
全組み合わせを愚直に計算しよとするとO(N ^ 2)で最大10 ^ {10}くらいの処理が必要になってTLEになる。 2重ループを工夫して処理が必要そうだったので、[tex:A {i}]はループで処理しつつ、各[tex:A {i}]に対するB _ {j}としては二分探索でA _ {i}に1番近いものを探して計算をした。

E - Safety Journey

もう一工夫が足りなかったのでTLEが解決できなくて解けなかった。
問題文を読むとDPを使えば解けそうだと思ったのでDP[i][j]=i日目に都市jにいる場合の旅の数 として解こうとした。 だけどDPを更新するときに各iに対して2重ループが発生して最終的にO(KN ^ {2}となってTLEになった。
解説を読んでみたらここまでは意図通りでそこからもう一工夫しての処理が必要っぽい。後で解説熟読して復習しとこ。