题解:P15056 [UOI 2023 II Stage] Unenslaved puppy
对于每个防护罩,我们会发现如果蜜蜂和狗一个在它里面,一个在它外面,那这个保护罩就是起到效果的。
怎么算他在不在保护罩里面呢?对比欧几里得距离和保护罩半径即可。
因此我们去找第一个起到保护效果的保护罩,能找到就输出不可以并结束程序,找不到就在最后输出可以。
代码如下:
#include<bits/stdc++.h>
using namespace std;
double jl(int xa,int ya,int xb,int yb){
return sqrt((xb-xa)*(xb-xa)+(yb-ya)*(yb-ya));
}
int main(){
int n,x1,y1,x2,y2;
cin>>n>>x1>>y1>>x2>>y2;
for(int i=1;i<=n;i++){
int p,r;
cin>>p>>r;
double jx=jl(p,0,x1,y1),jy=jl(p,0,x2,y2);
if((jx<=r)!=(jy<r)){//注意蜜蜂在保护罩上保护罩是可以保护到蜜蜂的。
cout<<"NO"<<endl;
cout<<i<<endl;
return 0;
}
}
cout<<"YES"<<endl;
return 0;
}