#include <iostream>
#include <vector>
#include <deque>
#include <algorithm>
#include <map>
using namespace std;
int N, dis;
map<pair<int,int>,bool> lakeMap;
map<pair<int,int>,bool> visited;
inline bool jumpOut(int x, int y)
{
if (x <= dis-50)
return 1;
if (y <= dis-50)
return 1;
if (x>=50-dis)
return 1;
if (x>=50-dis)
return 1;
return 0;
}
void jumpRange(map<pair<int,int>,bool>& jmp,double radius)
{
for (int i = 0; i < radius; i++)
{
for (int j = 0; j < radius; j++)
{
if (i * i + j * j <= radius*radius)
{
jmp[{i, j}] = 1;
jmp[{i, -j}] = 1;
jmp[{-i, j}] = 1;
jmp[{-i, -j}] = 1;
}
}
}
}
int main()
{
cin >> N >> dis;
for (int i = 0; i < N; i++)
{
int a, b;
cin >> a >> b;
lakeMap[{a, b}] = 1;
}
deque<pair<int, int>> que;
map<pair<int, int>,bool> jmpCenter;
jumpRange(jmpCenter, dis + 7.5);
for (auto& it : jmpCenter)
{
que.push_back({ it.first.first,it.first.second});
}
map<pair<int, int>, bool> newJmpCent;
jumpRange(newJmpCent, dis);
while (!que.empty())
{
int tmpX = que.front().first;
int tmpY = que.front().second;
que.pop_front();
if (jumpOut(tmpX, tmpY))
{
cout << "Yes" << endl;
return 0;
}
for (auto& it : newJmpCent)
{
int curX = it.first.first + tmpX;
int curY = it.first.second + tmpY;
if (jumpOut(curX, curY))
{
cout << "Yes" << endl;
return 0;
}
if (lakeMap[{curX, curY}] == false)
continue;
if (visited[{curX, curY}] == true)
continue;
visited[{curX, curY}] = true;
que.push_back({ curX,curY });
}
}
cout << "No" << endl;
}
06-图2 Saving James Bond - Easy Version 拯救007
最新推荐文章于 2024-07-25 12:39:48 发布