topcoder SRM 623 DIV2 CatAndRat

解决本题的一个关键点就是当Cat进入时,此时Rat在哪个位置?

注意移动方向可以随时改变,由于是圆环,故离入口最远点的距离是pi*R,即圆的一半,

当cat进入时(cat的速度大于rat的速度,否则不可能追上)

  如果rat移动的距离小于圆环的一半,即此时rat的位置为移动最远的位置

  如果rat移动的距离大于圆环的一半,则可以在pi*R附近摇摆,当cat进入则刚好rat在pi*R即可

之后保持与rat相同的方向即可

#include <iostream>
#include <algorithm>
using namespace std;
const double pi = acos(-1.0);
class CatAndRat{
public:
    double getTime(int R, int T, int Vrat, int Vcat){
        if(Vrat >= Vcat) return -1.0;
        else return min(pi*R,(double)Vrat*T)/(Vcat-Vrat);
    }
};
原文地址:https://www.cnblogs.com/xiongqiangcs/p/3771211.html