C. Black Circles
C. Black Circles
\(\hspace{20px}\)二维平面上有 \(n\) 个圆。其中 \(i\) 个圆以 \((x_i,y_i)\) 为圆心。最初,所有圆的半径都是 \(0\) 。
\(\hspace{20px}\)圆的半径以每秒 \(1\) 个单位的速度增加。
\(\hspace{20px}\)你目前在 \((x_s,y_s)\) 处;你的目标是到达 \((x_t,y_t)\) 处,且不触及任何圆的周长(包括到达 \((x_t,y_t)\) 的时刻)。您可以朝任何方向移动。但是,你的速度限制为每秒 \(1\) 个单位。
\(\hspace{20px}\)请判断这是否可行。
考虑直接沿着直线走向目标。
如果某个圆先到达目标,那么无论我们走哪条路,都没有成功的机会。
否则,在通往目标的路上不会经过任何圆圈。
(假设相遇了推出的结论)
点击查看代码
using ll = long long;
ll dis(ll x1, ll y1, ll x2, ll y2){
ll dis2 = (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2);
return dis2;
}
void solve(){
int n;
cin >> n;
vector<ll> x(n), y(n);
for(int i = 0;i < n;i++){
cin >> x[i] >> y[i];
}
ll xs, ys, xt, yt;
cin >> xs >> ys >> xt >> yt;
ll distance = dis(xs, ys, xt, yt);
for(int i = 0;i < n;i++){
if(dis(xt, yt, x[i], y[i]) <= distance){
cout << "NO\n";
return;
}
}
cout << "YES\n";
}
浙公网安备 33010602011771号