kmjp's blog

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

TopCoder SRM 623 Div2 Medium CatAndRat

Div2 Easyよりこっちの方が簡単…。
http://community.topcoder.com/stat?c=problem_statement&pm=12932

問題

半径Rの円形のチューブがある。
ある時刻にチューブのある点にネズミを入れる。このネズミは速度Vratで移動する。
時刻T後、同じ点より猫を入れる。このネズミは速度Vcatで移動する。

ネズミと猫は互いの位置を認識している。
ネズミは猫から逃げ、猫はネズミを追おうとするとき、猫がチューブに入った後、ネズミに追いつくまでの時間を求めよ。

解法

ネズミの方が移動が速いなら、永遠にネズミは逃げられる。
それ以外の場合、ネズミは最初の時間Tで出来るだけ遠くに逃げようと、最長でmin(T*Vrat, π*R)だけ逃げることができる。
後はこの距離をVcat-Vtatの速度差で埋めるまでの時間を求めればよい。

class CatAndRat {
	public:
	double getTime(int R, int T, int Vrat, int Vcat) {
		double dist;
		if(Vrat>=Vcat) return -1;
		dist=min((double)T*Vrat,R*atan(1)*4);
		return dist/(Vcat-Vrat);
	}
}

まとめ

うーん、Easyの方が手間取った…。