TopCoder SRM 380 Div1 Easy LameKnight
問題
Lame Knightというチェスの駒を考える。
Lame Knightは、
- 上に一歩、右に二歩
- 上に二歩、右に一歩
- 下に一歩、右に二歩
- 下に二歩、右に一歩
の動きをすることができる。
(h,w)のチェス盤の左下(1,1)から出発して、
できるだけ多くの回数を動きたい。
ただし、4種類の動き全てが可能ならば、それらを少なくとも一度ずつはしなければならない。
このとき、Lame Knightが訪れるマスの数の最大値を求めよ。
制約条件
h,w≦2000000000
方針
場合分け。
h<2の場合一歩も動けない。
h==2の場合、wに応じて4歩まで動ける。
それ以外の場合は、wに応じて動ける回数が決まる。
ソースコード
class LameKnight { public: int maxCells(int h, int w) { if(h<2)return 1; if(h==2)return min((w+1)/2,4); if(w<4)return w; if(w<7)return 4; if(w<8)return 5; return w-2; } };