Jzoj1973 信号塔

C++信号塔 信号塔 题目描述 方舟新城经过多年的建设,终于要投入使用了。方舟新城是一个标准的正方形,确切的说,可以将方舟新城看成是一个NxN的网格,线段横平竖直形成NxN个格点,相邻两个格点间都是1单位长度。下图是一个5x5的情形。 网格中左下角的坐标为(1, 1),左下角右边的格点坐标为(2,1),左下角上边的格点坐标为(1, 2),依次类推。图中的每一个格点都有1栋房子,NxN的方舟新城共有NxN栋房子。 为了尽快的让每栋房子都能够接入移动网络,联邦移动公司正在加班加点的建设信号塔,信号塔都建设在格点上,每个信号 阅读详情

  lanwuni接到一个任务,在C市建立N个信号塔来完成城市中的通讯任务。   

假设C市是一个坐标范围[-2000000,2000000]的网格,一些整点上有用户,你也可以在整点上建立信号塔。

一个点上可以建立多座。 在C市,两点之间的距离是曼哈顿距离,也就是横纵坐标差值之和。

每个信号塔都有一个半径Di,表示与i曼哈顿距离不超过Di的地方都能被这个信号塔的信号覆盖到。  

建立信号塔要满足一些性质:

   1. 每个信号塔有一定的用户,lanwuni要把信号塔建立在某个地方,使得属于该塔的用户都能被信号覆盖到;

   2. 信号塔有一定等级和安装限制,所以,第i号信号塔能覆盖的所有整点,必须也被第i+1号信号塔覆盖到。即使这个整点上没有用户。   

现在告诉你每个信号塔的半径,以及每个信号塔的用户,请你帮lanwuni谋划一下应该把这N个信号塔建立在什么地方,保证有解。


非常好的计算几何题

首先,显然一个信号塔的范围是多个菱形的交,最后是一个平行四边形

但是直接并起来非常不方便,因为斜着的平行四边形不好直接求交

我们将其旋转π/4并乘上√2变成整数运算,那么坐标就变成了(X-Y,X+Y)

变换完之后,每个信号塔的范围就是用户的范围交起来,让后根据半径的差值来倒序确定每个灯塔的范围,到1的时候随便选一个点作为答案

注意:坐标的逆变换公式为(X+Y/2,-X+Y/2)所以要考虑奇偶性,做一些微调即可

(这种题就是这么恶心,很难讲清楚,还是靠自己意会比较重要,有Solution也不是很清楚)

#pragma GCC optimize("O3")
#pragma G++ optimize("O3")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 100010
using namespace std;
int x[N],y[N],n,m,r[N];
struct mat{ int x[2],y[2]; } s[N],w[N];
inline mat merge(mat a,mat b){
	mat c;
	c.x[0]=max(a.x[0],b.x[0]);
	c.x[1]=min(a.x[1],b.x[1]);
	c.y[0]=max(a.y[0],b.y[0]);
	c.y[1]=min(a.y[1],b.y[1]);
	return c;
}
inline mat out(mat x){
	if(x.x[0]-x.y[0]&1)
		if(x.x[0]<x.x[1]) ++x.x[0];
		else ++x.y[0];
	printf("%d %d\n",x.x[0]+x.y[0]>>1,-x.x[0]+x.y[0]>>1);
	return x;
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;++i){
		scanf("%d",r+i);
		s[i].x[0]=s[i].y[0]=-1e8;
		s[i].x[1]=s[i].y[1]=+1e8;
	}
	for(int i=1,j,c;i<=n;++i){
		scanf("%d%d%d",&j,x+i,y+i);
		c=x[i]-y[i]; y[i]+=x[i]; x[i]=c;
		s[j]=merge(s[j],(mat){{x[i]-r[j],x[i]+r[j]},{y[i]-r[j],y[i]+r[j]}});
	}
	w[n]=s[n];
	for(int dr,i=n-1;i;--i){
		w[i]=w[i+1];
		dr=r[i+1]-r[i];
		w[i].x[0]-=dr;
		w[i].x[1]+=dr;
		w[i].y[0]-=dr;
		w[i].y[1]+=dr;
		w[i]=merge(w[i],s[i]);
	}
	for(int dr,i=1;i<=n;++i){
		s[i]=out(w[i]);
		dr=r[i+1]-r[i];
		w[i].x[0]=s[i].x[0]-dr;
		w[i].x[1]=s[i].x[0]+dr;
		w[i].y[0]=s[i].y[0]-dr;
		w[i].y[1]=s[i].y[0]+dr;
		w[i+1]=merge(w[i],w[i+1]);
	}
}
禾赛XT16 vs XT32激光雷达实测对比:选16线还是32线?看完这篇不纠结 本文深度评测禾赛XT16与XT32激光雷达的性能差异与应用选择。通过实测数据对比,分析16线与32线激光雷达在点云密度、动态场景适应性及与IMU协同工作等方面的表现,帮助用户根据自动驾驶、机器人等不同应用场景做出最优选型决策。 阅读详情

相关推荐

CoppeliaSim学习笔记(1):建立Python脚本与CoppeliaSim的连接

CoppeliaSim学习笔记,建立python和CoppeliaSim的连接,实现联调。

qq_22487889的博客 1万+

【2011集训队出题】信号塔

Description: lanwuni接到一个任务,在C市建立N个信号塔来完成城市中的通讯任务。   假设C市是一个坐标范围[-2000000,2000000]的网格,一些整点上有用户,你也可以在整点上建立信号塔。一个点上可以建立多座。 在C市,两点之间的距离是曼哈顿距离,也就是横纵坐标差值之和。每个信号塔都有一个半径Di,表示与i曼哈顿距离不超过Di的地方都能被这个信号塔的信号覆盖到。

Cold_Chair的博客 1079

数据科学常见模型总结(二)-倾向性得分匹配模型

PSM的核心思想是从未受干预的用户群体中,找到和干预对象一模一样的用户,这样就可以把因果效应归因到干预上。

wudelong0112的专栏 4884

关于(基站高塔发射信号覆盖半径)(高塔可视距离半径)(高处摄像头覆盖半径)r的计算

最近做一个项目需要计算摄像头的可视半径,查了一下才,一开始简单的以为很简单,后来才知道思维方法错了。      关于(基站高塔发射信号覆盖半径)(高塔可视距离半径)(高处摄像头覆盖半径)r的计算。     百度一下,发现一个网友有相同的疑问,有人给出解答方法,经过我推算是正确的,如下。 r=根号(2Rh)有关问题 2013-09-18 18:06匿名 | 分类:

youshengyoushe的专栏 6757

强化学习:Distributed PPO (DPPO) 学习笔记

DPPO = Distributed + Proximal Policy Optimization Distributed:多个智能体并行训练 Proximal:限制策略更新幅度,确保稳定性 Policy Optimization:基于策略梯度的优化方法 核心思想:多个智能体并行探索环境,共享经验,通过裁剪策略更新确保训练稳定

只是个人学习笔记 1330

【Flink】状态编程: 订单超时告警

文章目录一、基础概念二、Flink状态编程1、支持的状态类型2、Managed Keyed State六种类型基本API状态的生命周期3、Managed Operator State三、案例:订单延迟告警统计1、需求描述2、需求分析3、数据与模型4、详细实现 一、基础概念 在Flink架构体系中,有状态计算可以说是Flink非常重要的特性之一。 有状态计算是指: 在程序计算过程中,在Flink...

一只皮皮熊 2861

信号塔问题(看一次,爽一次,一直看,一直爽,嘻嘻)

说什么都不如先来个题目重要,是吧? 题目描述 有N个顶点,在顶点上放置信号塔则与之相邻的顶点能被信号覆盖到。 现在给你N-1条边,求解最少需要放置多少个信号塔才能使得所有顶点都有信号 输入 第一行:一个整数N 接下来N-1行:每行两个整数a和b(中间空格隔开,表示a和b相连) 输出 一个整数,最少需要放置信号塔的个数 样例输入 7 1 2 2 3 2 5 2 7 3 4 5 6 样例输出 3 (有...

weixin_44826485的博客 2080

3、数据导入与清洗:Excel、SQL、SPSS、Stata和SAS数据处理

本文详细介绍了如何从Excel文件、SQL数据库以及SPSS、Stata和SAS等统计软件中导入和清洗数据。针对不同数据来源的特点,提供了具体的处理方法,包括跳过无用行、重命名列、处理缺失值、转换数据类型、保留元数据等关键步骤。同时,通过实际应用案例展示了如何整合多源数据,并总结了数据导入和清洗的最佳实践,帮助读者高效完成数据预处理工作,为后续的数据分析打下坚实基础。

133

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

题目描述 科丁新城经过多年的建设,终于要投入使用了。科丁新城是一个标准的正方形,确切的说,可以将科丁新城看成是一个N*N的网格,线段横平竖直形成N*N个格点,相邻两个格点间都是1单位长度。下图是一个5*5的情形。 网格中左下角的坐标为(1, 1),左下角右边的格点坐标为(2,1),左下角上边的格点坐标为(1, 2),依次类推。图中的每一个格点都有1栋房子,N*N的科丁新城共有N*N栋房子。 为了尽快的让每栋房子都能够接入移动网络,科丁移动公司正在加班加点的建设信号塔,信号塔都...

GKS_zzx的博客 1162

高云FPGA系列教程(1):FPGA和ARM开发环境搭建

至此,高云FPGA和MCU开发环境就搭建完成了,整体还是比较简单的,几乎是一键完成,下一篇文章我们进行实际的FPGA和MCU开发。本文是高云FPGA系列教程的第1篇文章。

whik1194的博客 6184

STM32开发 -- 4G模块开发详解(1)

这部分一直再看,资料都已经整理好了,但是一直没有汇总。接下来就详细的看一下,GSM这部分是怎么实现的。

不积跬步,无以至千里 5万+

Cf Edu 15 C 城市与信号塔[二分]

题目连接http://codeforces.com/contest/702/problem/CDescriptionYou are given n points on the straight line — the positions (x-coordinates) of the cities and m points on the same line — the positions (x-coor

xgogoforit的博客 843

第58篇:AI技术实战:基于深度学习的智能音频内容审核系统

深度学习技术为智能音频内容审核系统提供了强大的支持,通过CNN、RNN和Transformer等模型,能够实现高效的音频内容检测和过滤。使用TensorFlow和Keras可以快速构建和训练音频审核模型,而预训练模型则可以进一步提升性能。数据预处理、特征提取和性能优化是提升智能音频审核系统性能的关键。希望本文的代码示例和注意事项能帮助你更好地理解和应用这些技术。接下来,我们将继续探索更多AI技术实战案例。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 704

【BZOJ2823】【AHOI2012】信号塔 最小圆覆盖 计算几何

题解之前: 首先最小圆覆盖虽然有三层 forfor 循环,但是它是期望 O(n)O(n) 的。什么?你问我为啥?那我只能呵呵了,50W的 O(n3)O(n^3) 高速跑过。 后交的是不求凸包直接跑的,先交的是求了凸包再跑的。。并没有什么差距。 题解: 这道题我们可以先写一份求凸包来缩减点的规模,如果点是随机生成的,那么期望有不到100个点在凸包上,然后就可以乱搞了(其实毛用没有23

辗转山河弋流歌 2438

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【BZOJ 2823】 [AHOI2012]信号塔

随机增量法求最小圆覆盖~ (三倍经验题。。)

Regina8023 1126

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

迷之信号塔

题目描述 有N个顶点,在顶点上放置信号塔则与之相邻的顶点能被信号覆盖到。 现在给你N-1条边,求解最少需要放置多少个信号塔才能使得所有顶点都有信号 输入 第一行:一个整数N 接下来N-1行:每行两个整数a和b(中间空格隔开) 输出 一个整数,最少需要放置信号塔的个数 样例输入 7 1 2 2 3 2 5 2 7 3 4 5 6 样例输出 3 这该死的信号塔终于有点思路了了了 但还是不过,希望路...

qq_44209336的博客 823

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

BZOJ 2823: [AHOI2012]信号塔 随机增量法

2823: [AHOI2012]信号塔 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1063  Solved: 488 [Submit][Status][Discuss] Description 在野外训练中,为了确保每位参加集训的成员安全,实时的掌握和收集周边环境和队员信息非常重要,集训队采用的方式是在训练所在地散布N个小型传感

BlackJack 558

Jzoj3769【NOI2015模拟8.14】A+B

完成斐波那契进制下的加法运算 第一位为1,第二位为2,依次类推。。 这里其实很简单,只是要考虑一下进位即可 首先连续两位不为零直接向前进位即可 但是不能解决问题,因为可能出现一个位上面的值大于1 那么我们可以这样做,设连续的四位分别为:0,0,2,0 那么我们可以将其变成1,0,0,1 这样就相当于一次进位了,多次重复以上的进位过程即可 这里可以加上第0位方便运算 #includ

扩展の灰(Extended Ash/Cooevjnz) 573

Jzoj4840 小W砍大树

模拟就好,dfs模拟,记录深度计算 #include #include char s[32010],*S; int dijk(char*& s,int d){ int ret=(~d&1),v; for(;*s!=')';++s){ if(*s=='('){ v=dijk(++s,d+1); ret=(d&1?ret|v:ret&v); } if(*s=='T'){ v=1;r

扩展の灰(Extended Ash/Cooevjnz) 520

Jzoj2197 三核苷酸

三核苷酸是组成DNA序列的基本片段。具体来说,核苷酸一共有4种,分别用’A’,’G’,’C’,’T’来表示。而三核苷酸就是由3个核苷酸排列而成的DNA片段。三核苷酸一共有64种,分别是’AAA’,’AAG’,…,’GGG’。给定一个长度为L的DNA序列,一共可以分辨出(L-2)个三核苷酸。现在我们想用一些统计学的方法来进行一些分析,步骤如下: 1.对于这(L-2)个三核苷酸,我们从左到右给予编号

扩展の灰(Extended Ash/Cooevjnz) 512

Jzoj3542 冒泡排序

下面是一段实现冒泡排序算法的C++代码: for (int i=1;i  for (int j=1;j if (a[j]>a[j+1]) swap(a[j],a[j+1]); 其中待排序的a数组是一个1~n的排列,swap函数将交换数组中对应位置的值。 对于给定的数组a以及给定的非负整数k,使用这段代码执行了正好k次swap操作之后数组a中元素的值会是什么样的呢? 是一个模

扩展の灰(Extended Ash/Cooevjnz) 494

Jzoj4838 I like Matrix!

(I DO NOT like matrix!!!) 首先我们可以暴力 O(nmq) 考虑压位(bitset)可以得到60pts 正解:我们发现,这些操作如果用边连接起来会形成一颗树(每个节点必然入度为1) 那我们考虑用离线方法,将所有的操作连接起来,dfs遍历整颗操作树,每个操作都暴力修改&还原 这样最多就是O(nq)的 (然而我并不认为O(nq)能过,因为n) #include

扩展の灰(Extended Ash/Cooevjnz) 441

Jzoj4764 Brothers

在遥远的西方有一个古老的王国,国王将他的王国分成了网格状,每一块称之为一个城市。在国王临死前,他将这些城市分给了自己的N个儿子(编号为0到N-1)。然而这N个王子的关系不是很好,0讨厌1,1讨厌2,2讨厌3……N-1讨厌0。 在国王死后,这种不好的关系使得王子之间爆发了战争。战斗只会在相邻的两个城市之间爆发(共有一条边称之为相邻),并且只有当A讨厌B时,A才会对B发起战斗,结果必定是A获得这次战

扩展の灰(Extended Ash/Cooevjnz) 431
上一篇: Jzoj2183 树
下一篇: Jzoj2308 聚会
扩展的灰
博客等级 码龄12年 60粉丝 342原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值