AGC034 A-Kenken Race
1.概要
今日トライした問題は以下。
岩が2つ続いていたらダメ,というのが基本的な考えかた。問題文の制約からA<B<Dは確定するので,CがA,B,Dの間のどこに来るかで3パターンに分かれる。
1. A < C < B < D
2. A < B < C < D
3. A < B < D < D
2. パターン1 ( A < C < B < D )
AはCに向かい,BはDに向かうので,A-C間とB-D間のそれぞれの区間に岩が2つ続けて存在するときは到達不可能。それ以外は到達可能。
ここでのポイントはC-D間には岩が2つ続いていても良いという点
3.パターン2 ( A < B < C < D )
区間A-Cと区間B-Dは重なっているため,区間A-Dにおいて岩が2つ続けて存在してはならない。それ以外のときは先にB→Dを移動させておけば,A→Cの移動においてBが邪魔になる(パターン3で後述)こともないので,到達可能である。
4.パターン3 ( A < B < D < C )
このパターンではまった。区間A-Cが区間B-Dを含んでいるため,AがBを追い越す必要がある。このとき,AにとってBは岩と同じ役割(つまり邪魔)である。ただBは移動できるので,区間B-Dの中に . (岩がないところ)が3つ続けてあれば,.B .となるようにBをあらかじめ移動させておけばAはBを追い越すことができると考えた。そう考えて実装すると1ケースWAとなった。誤りだったのは区間B-Dの中に . (岩がないところ)が3つ続けてあればという点であった。実際はBの1つ手前の場所をB1とすると区間B1-Dにおいて . が3つ続けてあればよかったのである。そのように実装を修正して提出すると無事ACとなった。
5.終わりに
パターン3において,最初の実装では1ケースWAになり,BをBの1つ手前までと修正することでACを獲得したが,そこをBの2つ手前までとするときちんと最初のときとは別の1ケースのみWAとなった。
きちんと境界値をテストケースに入れてあるということを思い知らされる良い学びであった。
この記事が気に入ったらサポートをしてみませんか?