模拟算法-桶排-信号塔问题详解+代码——zzx的博客

这篇博客介绍了一道关于计算几何的算法题目,涉及在一个正方形网格中通过建设信号塔覆盖房子的问题。作者提供了输入输出样例,并给出了解题思路和代码实现,代码主要通过遍历所有房子和信号塔,判断房子是否在信号塔覆盖范围内来计算覆盖的房子数量。
摘要由CSDN通过智能技术生成

题目描述

    科丁新城经过多年的建设,终于要投入使用了。科丁新城是一个标准的正方形,确切的说,可以将科丁新城看成是一个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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值