直したらサンプル通った。見直しフェーズ(5分)あせるな、まだ提出しない。実装に問題はなさそう。(Practice)正解率30%以上のmediumが解けなかった。|http://www.topcoder.com/stat?c=problem_statement&pm=8464コーディングフェーズ縦横ナナメに進める。Y)進み、その後で直進する全部直進するサンプル合わない。Y)進んだ後でも、斜めに進んだほうが得なケースがある上記3パターンの最小値を返すよう実装。コーディングに手間取る・・・サンプル通った自分ルールであと5分は提出しない。コーディングのミスを発見。みたいなDPができるはず。最後、余る塔に関してはどうしようか。計算できる実装できた。メモ化は後回し残り10分、サンプル合わない。あれ?testCase2が18を返すべきところが9を返している数え漏らし?プログラムを見直す。みたいなケースは作れない絶望そのまま時間切れ。max(登場回数))すべての周期を確かめ、一番小さいものを採用する。p=2500で確かめる間に合った(1.2s)。不安だけどこれで提出システムテスト最大ケースで1.9sかかる。塗りつぶすしばらく配列外アクセスなどでハマるテストサンプル通った。思い浮かばないまあいいや、とりあえず提出システムテスト後TLEを食らうそう単純ではなかったか。何か効率的な方法がある?グループをunion-findかなんかで管理して探索コスト(ループ回数)を減らすのか?Javaで書かれた他の人のコードを見る基本的な方針は正しいっぽいそういえば塗りつぶす操作を全グループの処理が終わった後にしてるけど内側にしても挙動は変わらんよね。修正したら通った最大ケースで0.2s。する最小手数を求めよ1から順番に固定する?うーん最適かどうか怪しい気がする。40,320ある状態から可能な操作をしたあとの数列を全部キューに突っ込む一度見た状態はメモしておいてパスするループを抜けた時、メモに目的の数列が入ってればそのターン数、無ければ-1できた。