题解:P15056 [UOI 2023 II Stage] Unenslaved puppy
题意分析
本题要求我们判断小狗是否不会被咬。将其抽象后得到题目核心为判断点与圆的位置关系。
做法介绍
我们使用两点间的距离公式来完成这个判断。
具体地,若两点横坐标差为
求出点和圆心的距离,若
为了方便计算,我们给不等式两侧平方,这样就不用开根了。
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,x_1,y_1,x_2,y_2;
cin>>n>>x_1>>y_1>>x_2>>y_2;
for(int i=1;i<=n;i++){
int pos,r;
cin>>pos>>r;
if((x_1-pos)*(x_1-pos)+(y_1*y_1)<=r*r && (x_2-pos)*(x_2-pos)+(y_2*y_2)>r*r ||\
(x_1-pos)*(x_1-pos)+(y_1*y_1)>r*r && (x_2-pos)*(x_2-pos)+(y_2*y_2)<=r*r){
cout<<"NO\n"<<i;
return 0;
}
}
cout<<"YES";
}