DDKFC
总提交 : 247 测试通过 : 173
比赛描述
(提名来源:2011年校队出战福州现场赛曾用队名)
ACM校队暑假集训时,诸神牛认为学校伙实在太差,于是顿顿肯德基(DDKFC)的走起。可是,KFC吃太多后神牛浑身散发“诱蚊”香气,一时间背上被咬了好多包。
神牛身宽体胖,背部不仅平坦面积大,而且聚集了最吸引蚊子的香油,被蚊子到处咬了n个包,他只好暂时腾出敲代码的胳膊,跨过肩膀去挠痒痒。让我们这些无知围观群众在神牛背平面上建一个笛卡尔平面直角坐标系吧,坐标系方向不重要。在这个坐标系里,左右肩膀和每个包(全部虚拟成点,重叠的包算多个)的位置可用坐标表示。神牛手臂长为r,挠痒痒时能以肩膀为圆心做定轴转动,所有在手臂触及范围内(包括指尖)的包都可以被挠到。
最后,请无关群众算一下,有多少包是可以被挠到的?
输入
第一行包含一个正整数T (1≤T≤100),表示有T组数据。
每组数据包含若干行。
第一行包含6个整数n, r, x1, y1, x2, y2 (0≤n, r≤100),其中n, r含义参见题目描述,坐标(x1, y1) (x2, y2)依次指定了左肩和右肩的位置。
接下来n行,每行包含两个整数a和b,以空格分隔,第i行数据(ai, bi)表示第i个包的坐标位置。
所有坐标数据绝对值不超过100。
输出
每组数据输出一行,仅包含一个整数,为能挠到的包的个数。
样例输入
2
3 2 1 1 1 1
2 2
2 2
0 0
3 2 1 1 100 100
2 3
3 2
0 -1
样例输出
3
0
提示
题目来源
南京邮电大学第五届大学生程序设计竞赛之现场赛
#include<iostream>
using namespace std;
int main(){
int T,n,r,x1,y1,x2,y2,x,y,count;
cin>>T;
while(T--){
count = 0;
cin>>n>>r>>x1>>y1>>x2>>y2;
while(n--){
cin>>x>>y;
if((x-x1)*(x-x1)+(y-y1)*(y-y1)<=r*r ||
(x-x2)*(x-x2)+(y-y2)*(y-y2)<=r*r){
count++;
}
}
cout<<count<<endl;
}
}