/*算法思想是:采用贪心算法*/
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
struct node{
double x;
double y;
}p[101];
bool cmp(node a,node b)
{
return a.x<b.x;
}
int main()
{
int k,n,r,x,y,i,j;
cin>>k;
while(k--)
{
cin>>n>>r;
int count=1;
double s;
for(i=0;i<n;i++)
{
cin>>x>>y;
s=sqrt(r*r-y*y);
p[i].x=x-s; //区间左端点
p[i].y=x+s; //区间右端点
}
sort(p,p+n,cmp) ;//对区间进行排序,
//排好序后,从左至右看,当发现下一个区间的起始点大于前面所有区间的最小结束点的时候,答案加一
s=p[0].y; //将p[0]右端点设置为初始端点
for(i=0;i<n;i++)
{
if(p[i].x>s)
{
count++;
s=p[i].y;
}
else
{
if(p[i].y<s)
{
s=p[i].y;
}
}
}
cout<<count<<endl;
}
return 0;
}
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
struct node{
double x;
double y;
}p[101];
bool cmp(node a,node b)
{
return a.x<b.x;
}
int main()
{
int k,n,r,x,y,i,j;
cin>>k;
while(k--)
{
cin>>n>>r;
int count=1;
double s;
for(i=0;i<n;i++)
{
cin>>x>>y;
s=sqrt(r*r-y*y);
p[i].x=x-s; //区间左端点
p[i].y=x+s; //区间右端点
}
sort(p,p+n,cmp) ;//对区间进行排序,
//排好序后,从左至右看,当发现下一个区间的起始点大于前面所有区间的最小结束点的时候,答案加一
s=p[0].y; //将p[0]右端点设置为初始端点
for(i=0;i<n;i++)
{
if(p[i].x>s)
{
count++;
s=p[i].y;
}
else
{
if(p[i].y<s)
{
s=p[i].y;
}
}
}
cout<<count<<endl;
}
return 0;
}