pythonで青くなるブログ

主に競プロのについての記事(日記的な)を書きます。現在atcoder水色,こどふぉ青色。python3使って、やってます。atcoder青くなりたい

AGC033 LRUD Game

概要

AGC033 B問題(600) LRUD Gameの解説をしたいと思います。

言語

python

問題

atcoder.jp

解法1 (嘘貪欲)

僕は、コンテスト中に嘘貪欲でACしてしまいました。 (自分の回答) https://atcoder.jp/contests/agc033/submissions/5262993

内容

先手が落とす方向を決めて、それを防ぐように後手の手を選ぶ。それをLRUDの4方向で試す
という方針で実装したけど、

先手「右に落とすよー」
後手「じゃー左に動かそ」
先手「やっぱ、左に落とすわー」

みたいなパターンだと、右に落とされてしまう。
(しかし、嘘貪欲だと、落とされない という答えを出す。

入力例
H,W,N=3,3,4
sr,sc=2,2
S-> DRLL
T-> RUDD

という入力で誤答してしまいます。(今回は、テストケースに入っていなかったため、ACになってしまいました。)

解法2

内容

youtubeの解説放送でもありましたが、手順を後ろから見ていく手法です。
横方向の移動と、縦方向の移動に分けて考えます。 生存可能な範囲を変数として持っていて、手に応じてその範囲を変化させていきます
後ろから手を見ていくので、最初の手まで見終わった時にスタート地点が生存可能な範囲に入っていれば、「落とされない」と答えを出すことができます。 (AC code with python) atcoder.jp

終わりに

今後は証明のない嘘貪欲をしないように、気をつけます(反省)