解決本題的一個關鍵點就是當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); } };