题目描述
科丁新城经过多年的建设,终于要投入使用了。科丁新城是一个标准的正方形,确切的说,可以将科丁新城看成是一个N*N的网格,线段横平竖直形成N*N个格点,相邻两个格点间都是1单位长度。下图是一个5*5的情形。
网格中左下角的坐标为(1, 1),左下角右边的格点坐标为(2,1),左下角上边的格点坐标为(1, 2),依次类推。图中的每一个格点都有1栋房子,N*N的科丁新城共有N*N栋房子。
为了尽快的让每栋房子都能够接入移动网络,科丁移动公司正在加班加点的建设信号塔,信号塔都建设在格点上,每个信号塔覆盖的范围都是一个以信号塔建设位置为原点,半径为R的圆。距离某信号塔不超过R的房子都能被该信号塔所覆盖。目前科丁移动的工作人员已经建设了M座信号塔,科丁移动的工作人员想知道,当前有多少所房子至少被一个信号塔所覆盖。
输入格式
输入文件名:tower.in
输入文件第一行,3个空格分隔的正数N, M, R。
接下来M行,每行两个整数x, y, 表示一个信号塔的坐标(x, y)
输出格式
输出文件名:tower.out
输出一行一个整数,表示至少能被一座信号塔覆盖的房子数量。
输入输出样列
输入样例1:
5 2 1 3 3 4 2
输出样例1:
8
说明
【样例说明】
样例中,在一个 5*5 网格区域的格点(3,3)处和格点(4,2)处有信号塔,工作半径都为 1,如下图,有 8 个格点位置(红色点)的房子可以被信号塔覆盖到。
【数据范围】
对于 40%的数据:N, M ≤ 100,R = 0(当 R=0 时,信号塔能覆盖其所在格点的房子);
对于 100%的数据:N, M ≤ 100,0 ≤ R ≤ 100,1≤x,y≤ N,数据不保证信号塔不重叠。
【耗时限制】1000ms 【内存限制】128MB
原题链接:科丁乐|OJ平台
解题思路:
太水了这道题,十分简单,是个人都会好吧
如果你实在不会,就记住这个公式:(x-i)*(x-i)+(y-j)*(y-j)<=r*r
注:x,y,,i,j,表示什么自己都题目
不说了,上代码
#include<bits/stdc++.h>
using namespace std;
const int N=105;
struct yyds{
int x,y;
}t[N];
int main()
{
int n,m,r,ans,a[N][N];
cin>>n>>m>>r;
for(int i=1;i<=m;i++)
{
cin>>t[i].x>>t[i].y;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=1;k<=m;k++)
{
if((i-t[k].x)*(i-t[k].x)+(j-t[k].y)*(j-t[k].y)<=r*r)
{
ans++;
break;
}
}
cout<<ans;
return 0;
}
不明确思路的,直接私聊作者!
原创代码,未经许可,严禁转载!
其他题目解析链接:
https://blog.csdn.net/gks_zzx/category_11088899.html?spm=1001.2014.3001.5482
https://blog.csdn.net/gks_zzx/category_11198223.html?spm=1001.2014.3001.5482https://blog.csdn.net/gks_zzx/category_11070847.html?spm=1001.2014.3001.5482