洛谷-P3717 [AHOI2017初中组]cover
洛谷-P3717 [AHOI2017初中组]cover
题目背景
以下为不影响题意的简化版题目。
题目描述
一个 \(n\times n\) 的网格图(标号由 \(1\) 开始)上有 \(m\) 个探测器,每个探测器有个探测半径 \(r\) ,问这 \(n\times n\) 个点中有多少个点能被探测到。
输入格式
第一行 \(3\) 个整数 \(n,m,r\) ;
接下来 \(m\) 行,每行两个整数 \(x,y\)表示第 \(i\) 个探测器的坐标。
输出格式
能被探测到的点的个数。
输入输出样例
输入 #1
5 2 1
3 3
4 2
输出 #1
8
说明/提示
1≤n,m≤100
C++代码
#include <iostream>
#include <cmath>
using namespace std;
int a[105][105];
int main() {
int n, m, r, ans=0;
cin >> n >> m >> r;
int x[m], y[m];
for (int i=0; i<m; ++i) {
cin >> x[i] >> y[i];
a[x[i]][y[i]] = 1;
}
for (int i=1; i<=n; ++i)
for (int j=1; j<=n; ++j) {
if (a[i][j] > 0)
continue;
for (int k=0; k<m; ++k)
if (sqrt(pow(i-x[k], 2) + pow(j-y[k], 2)) <= r)
a[i][j] = 1;
}
for (int i=1; i<=n; ++i)
for (int j=1; j<=n; ++j)
ans += a[i][j];
cout << ans << endl;
return 0;
}