ac代码:
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
using namespace std;
int d,r;
long n;
struct xi{
double x;
double y;
double r;
double juli;
}xiang[1000010];
int main(){
while(scanf("%d %d",&r,&d)!=EOF){
cin>>n;
int sum = 0;
for(int i =0;i <n;i++){
cin>>xiang[i].x>>xiang[i].y>>xiang[i].r;
xiang[i].juli = xiang[i].x*xiang[i].x+ xiang[i].y* xiang[i].y;
xiang[i].juli = sqrt(xiang[i].juli);
if(xiang[i].juli - r+d >=xiang[i].r && xiang[i].juli +xiang[i].r <= r){
sum++;
}
}
cout<<sum<<endl;
}
}
解题思路:
计算每个小圆与大圆的距离,同时比较距离-r+d 是否大于或等于小圆r、距离+小圆r是否小于或等于大圆r。