SRM 564 DIV1 Easy - KnightCircuit2 (復習○)

問題


http://community.topcoder.com/stat?c=problem_statement&pm=10968&rd=15186

ボードの長さと高さが与えられる。
このとき、ナイトが動けるマスを返す。

解き方


1辺の最大の長さは45000のため、O(10^8)となり全探索では求められない。
そこで法則を探すことにする。

1)マスの1辺が1のとき
 動くことができないので、答えは1

2)マスの1辺が2のとき
 もう一つの辺の長さによって答えが変わる。
 1マスのときは+1、2マスの時は+1、3マスのときは+2、4マスのときは+2
 これが繰り返される。

3)マスが3*3のとき
 3*3のときは真ん中だけいけないので8.

4)それ以外
 全てのマスに行くことができるので全てのマスの数が答え。

コード


class KnightCircuit2 {

public: int maxSize(int w, int h) {
if(w>h)swap(w,h);

if(w==1)return 1;
if(w==2)return (h+1)/2;
if(w==3 && h==3)return 8;

return w*h;
}

};
このエントリーをはてなブックマークに追加