题解:P15056 [UOI 2023 II Stage] Unenslaved puppy

· · 题解

题解

根据圆的定义,如果一个点与圆心的距离小于等于半径,则它在圆内。

因此我们用勾股定理计算 \sqrt{(pos-x_1)^2+{y_1}^2}\sqrt{(pos-x_2)^2+{y_2}^2},如果这俩一个小于等于 r 一个大于 r,则这个防护罩把它们隔开了,输出并结束程序即可。

注意这题中,正好卡在防护罩上也算在里面。此外 y1cmath 头文件的关键字。

代码

#include<iostream>
#include<cmath>
using namespace std;
int n,x1,y_1,x2,y2,pos,r;
int main(){
    cin>>n>>x1>>y_1>>x2>>y2;
    for(int i=1;i<=n;i++){
        cin>>pos>>r;
        double d1=sqrt((pos-x1)*(pos-x1)+y_1*y_1),d2=sqrt((pos-x2)*(pos-x2)+y2*y2);
        if((d1<=r)!=(d2<=r)){
            cout<<"NO\n"<<i;
            return 0;
        }
    }
    cout<<"YES";
    return 0;
}