問題
http://community.topcoder.com/stat?c=problem_statement&pm=12201&rd=15181
解き方
サンプルを表に書いて見ると、各動ける数ごとにどれだけのマスを占めるか
一意に決めることができる。ただきちんと表に落とすのがちょっと複雑。
コード
class HyperKnight {
public: long long countCells(int a_, int b_, int numRows, int numColumns, int k) {
long long R=numRows,C=numColumns,a=a_,b=b_;
if(a<b)swap(a,b);
long long ans[9]={};
ans[2]=b*b*4;
ans[3]=b*(a-b)*8;
ans[6]=(R-2*a)*(a-b)*2+(C-2*a)*(a-b)*2;
ans[8]=(R-2*a)*(C-2*a);
ans[4]=R*C-ans[2]-ans[3]-ans[6]-ans[8];
return ans[k];
}
};
public: long long countCells(int a_, int b_, int numRows, int numColumns, int k) {
long long R=numRows,C=numColumns,a=a_,b=b_;
if(a<b)swap(a,b);
long long ans[9]={};
ans[2]=b*b*4;
ans[3]=b*(a-b)*8;
ans[6]=(R-2*a)*(a-b)*2+(C-2*a)*(a-b)*2;
ans[8]=(R-2*a)*(C-2*a);
ans[4]=R*C-ans[2]-ans[3]-ans[6]-ans[8];
return ans[k];
}
};