#include <stdio.h>
#include <math.h>
#define maxsize 100
int visit[maxsize];
typedef struct{
double x,y;
}coored;
int firstjump(double distance,coored point){ //判断第一跳是否成功
return (distance+7.5)*(distance+7.5)>=(point.x*point.x+point.y*point.y);
}
int isSafe(double distance,coored point){ //判断在此点是否能上岸
return point.x-distance<=-50||point.y-distance<=-50||point.x+distance>=50||point.y+distance>=50;
}
int jump(double distance,coored p1,coored p2){ //判断是否能从此点跳到下一点
return distance*distance>=(p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y);
}
int DFS(double distance,coored *croc,int n,int v){
int answer=0;
visit[v]=1;
if(isSafe(distance,croc[v])) answer=1;
else{
for(int i=0;i<n;i++){
if(visit[i]==0&&jump(distance,croc[v],croc[i])){
answer=DFS(distance,croc,n,i);
if(answer==1) break;
}
}
}
return answer;
}
int main(){
int n;
double distance;
for(int k=0;k<maxsize;k++) visit[k]=0;
scanf("%d %lf",&n,&distance);
if((7.5+distance)>=50){
printf("Yes\n"); return 0;
}
coored croc[n];
for(int i=0;i<n;i++)
scanf("%lf %lf",&croc[i].x,&croc[i].y);
int flag=0;
for(int j=0;j<n;j++){
if(visit[j]==0&&firstjump(distance,croc[j])){ //遍历初跳成功的鳄鱼
visit[j]=0;
flag=DFS(distance,croc,n,j);
}
}
if(flag==1) printf("Yes\n");
else printf("No\n");
return 0;
}
06-图2 Saving James Bond - Easy Version
最新推荐文章于 2021-11-25 09:45:36 发布