kmjp's blog

競技プログラミング参加記です

TopCoder SRM 564 Div1 Easy KnightCircuit2

先ほど終わったSRM564。
前回やらかしてしまったので今回は慎重に…と思ったがEasyが簡単で拍子抜け。
Mediumで苦労したものの何とか解ききった。
Mediumのポイントがいまいちだったけど、そこそこレートが回復。

ではEasyから。
http://community.topcoder.com/stat?c=problem_statement&pm=10968

チェスのナイトの動きをするとき、盤の大きさを与えられて最大何マスに移動できるかを答える。
同じところを何度通ってもよく、制限が緩い。

  • 高さか幅が1:最初にコマを置いたらどこにも移動できないので1
  • 高さか幅が2:例1と同じ。(長い方+1)/2
  • 高さと幅が3:下記の通り8
ooo
oxo
ooo
  • 高さか幅が3より大きい:上の穴あき四角を1マスずつ動かすと、結局どこでも移動できるので高さ×幅
class KnightCircuit2 {
	public:
	int maxSize(int w, int h) {
		int W,H;
		W=max(w,h);
		H=min(w,h);
		
		if(H==1) {
			return 1;
		}
		else if(H==2) {
			return (W+1)/2;
		}
		else if(H==3) {
			if(W==3) return 8;
			return W*H;
		}
		else return W*H;
	}
};

まとめ

8になるパターンをみんな見落とさないかなーと思ったけど、うちのroomは誰も見落としてなかった。