本题的考点是模拟,我们通过枚举每个点与信号塔之间的距离,与半径进行比较,如果半径大于距离,那么该点可以被覆盖,计数器加一,由二维空间,两点之间的距离公式计算每个点与信号塔之间的距离double d = sqrt(pow(xh[i].x1 - j, 2) + pow(xh[i].y1 - k, 2));注意这里d的类型为double,因为如果定义为int,sqrt是向下取整,d变小,会统计多余的点,导致计数器不正确,枚举完所有的距离之后,输出cnt即可
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
const int N = 1e2+10;
#define int long long
int w,h,n,r;
bool vis[N][N];
bool vis1[N][N];
struct xinhao{int x1;int y1;
}xh[N];int whd[N][N];
signed main() {cin>>w>>h>>n>>r;for(int i = 1;i<=n;i++){int x,y;cin>>x>>y;if(!vis1[x][y]){xh[i].x1 = x;xh[i].y1 = y;vis1[x][y]=1;}}int cnt = 0;// double d = sqrt(pow(xh[i].x1 - j, 2) + pow(xh[i].y1 - k, 2));for(int i = 1;i <= n;i++){for(int j = 0;j<=w;j++){for(int k = 0;k<=h;k++){double d = sqrt(pow(xh[i].x1 - j, 2) + pow(xh[i].y1 - k, 2));if(!vis[j][k]&&d<=r){cnt++;vis[j][k]=1;}}}}cout<<cnt;return 0;}