题目链接:http://118.190.20.162/view.page?gpid=T7
#include <iostream>
#include <algorithm>
#include <stdlib.h>
#include <stdio.h>
#include <queue>
#define ll long long
using namespace std;
ll n,m,k,r;
struct Node{
int x,y;
int step;
int k_num;
}E[200];
bool vis[200];
queue<Node> q;
bool Judge(ll x1,ll y1,ll x2,ll y2){
ll x=abs(x2-x1);
ll y=abs(y2-y1);
if(x*x+y*y<=r*r){
return true;
}
else
{
return false;
}
}
int BFS(){
E[0].step=0;
E[0].k_num=0;
q.push(E[0]);
vis[0]=true;
while(!q.empty()){
Node top=q.front();
q.pop();
if(Judge(top.x,top.y,E[1].x,E[1].y)){
return top.step;
}
for(int i=0;i<n+m;i++){
if(!vis[i]&&Judge(top.x,top.y,E[i].x,E[i].y)){
vis[i]=1;
if(E[i].k_num==k&&i>=n){
continue;
}
if(i>=n){
E[i].k_num=top.k_num+1;
}
else
{
E[i].k_num=top.k_num;
}
E[i].step=top.step+1;
q.push(E[i]);
}
}
}
}
int main() {
cin>>n>>m>>k>>r;
for(int i=0;i<n;i++){
cin>>E[i].x>>E[i].y;
}
for(int i=n;i<n+m;i++){
cin>>E[i].x>>E[i].y;
}
cout<<BFS()<<endl;
return 0;
}