题目描述
一个 n×n 的网格图(标号由 1 开始)上有 m 个探测器,每个探测器有个探测半径 r ,问这 n×n 个点中有多少个点能被探测到。
输入格式
第一行 3 个整数 n,m,r ;
接下来 m 行,每行两个整数 x,y表示第 i 个探测器的坐标。
输出格式
能被探测到的点的个数。
输入输出样例
输入 #1复制
5 2 1 3 3 4 2
输出 #1复制
8
说明/提示
1≤n,m≤100
思路:输入探测器的位置,然后搜索整个矩阵,查看哪个位置属于探测器的探测范围内,标记为1。最后,搜索矩阵记录能探测到位置数。(数据较小,不会超时)
注意:探测器能探测到自己。
#include <iostream>
#include <math.h>
#include <algorithm>
#include <stack>
#include <string.h>
#include <vector>
#include <cstring>
using namespace std;
int n,m,ans=0,x,y;
double r;
int a[1005][1005];
int main() {
cin>>n>>m>>r;
for(int i=0;i<m;i++)
{
cin>>x>>y;
a[x][y]=1;
for(int k=1;k<=n;k++)
{
for(int j=1;j<=n;j++)
{
int tx=fabs(k-x),ty=fabs(j-y);
double tmp=sqrt((tx*tx)+(ty*ty));
if(tmp<=r)
{
a[k][j]=1;
}
}
}
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(a[i][j])
ans++;
}
cout<<ans<<endl;
return 0;
}