kmjp's blog

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

TopCoder SRM 633 Div2 Medium Jumping

Div1 Easyが解ければこちらも簡単。
http://community.topcoder.com/stat?c=problem_statement&pm=13463

問題

Div1 Easyと設定はほぼいっしょ。
違いは目的地が(x,y)とY座標が0でないことと、J[i]1周で目的地にたどり着けるかどうかを判定する点である。

解法

Div1 Easyと同じ考え。
TopCoder SRM 633 Div1 Easy PeriodicJumping - kmjp's blog

(0,0)-(x,y)を結ぶ辺と、J[i]からなる辺が多角形を成せるか判定するだけ。

class Jumping {
	public:
	string ableToGet(int x, int y, vector <int> jumpLengths) {
		double tot=0, ma=sqrt(x*x+y*y),N=jumpLengths.size();
		int i;
		tot+=ma;
		FOR(i,N) {
			tot+=jumpLengths[i];
			ma=max(ma,0.0+jumpLengths[i]);
		}
		if(ma*2<=tot) return "Able";
		return "Not able";
		
	}
}

まとめ

とはいえ、多角形に気づかないと結構てこずりそう。