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