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;
	}
};