当前位置: 首页 > news >正文

【题解】[ABC312E] Tangency of Cuboids(adhoc)

【题解】[ABC312E] Tangency of Cuboids

少见的 at 评分 \(2000+\) 的 ABC E 题,非常巧妙的一道题。

特别鸣谢:@dbxxx 给我讲解了他的完整思路。

题目链接

ABC312E - Tangency of Cuboids

题意概述

给定三维空间中的 \(n\) 个长方体,每个长方体以其一条体对角线的两个端点的坐标形式给出,即对于每一个长方体 \(i\),给定其体对角线端点的坐标 \((x_{i,1},y_{i,1},z_{i,1})\)\((x_{i,2},y_{i,2},z_{i,2})\)

要求对于给定的每一个长方体,求出给定的其它长方体中,与其共享一个面的长方体数量。

具体地说,对于每个 \(i(1 \le i \le n)\),找到 \(1≤j≤n\)\(j≠i\)\(j\) 的数量,使得第 \(i\) 个长方体和第 \(j\) 个长方体的表面有一个正面积的交集。

题目保证每个长方体两两不交,即对于任意两个长方体,它们的交集体积为 \(0\)

数据范围

  • \(1\le n \le 10^5\)
  • \(0 \le x_{i,1}<x_{i,2}\le 100\)
  • \(0 \le y_{i,1}<y_{i,2}\le 100\)
  • \(0 \le z_{i,1}<z_{i,2}\le 100\)

思路分析

\(n\) 的范围很大,但是观察长方体体对角线端点的坐标范围只有 \(100\),容易想到最终的时间复杂度应该是 \(100^3\) 或者 \(100^4\),启示我们要处理单位小正方体的信息。

注:单位小正方体指的是坐标范围内棱长为 \(1\) 的正方体。

可以考虑将题目中所有已知的长方体,都分解成多个单位小正方体处理。即,对于长方体 \(i\),我们把这个长方体中包含所有单位小正方体都染色成 \(i\)

换句话说,我们定义体对角线端点坐标为 \((i,j,k)\)\((i+1,j+1,k+1)\) 的单位小正方体的坐标为 \((i,j,k)\)\(col_{i,j,k}\) 表示坐标为 \((i,j,k)\) 的单位小正方体被染成的颜色。那么对于体对角线端点坐标为 \((x_{t,1},y_{t,1},z_{t,1})\)\((x_{t,2},y_{t,2},z_{t,2})\) 的长方体 \(t\),就将所有坐标为 \((i,j,k)\),其中 \(x_{t,1}\le i <x_{t,2},y_{t,1} \le j < y_{t,2},z_{t,1} \le k < z_{t,2}\) 的单位小正方体都染成 \(t\),即让 \(col_{i,j,k}=t\)

注意:这里 \(i,j,k\) 条件是 \(x_{t,1}\le i <x_{t,2},y_{t,1}\le j<y_{t,2},z_{t,1} \le k <z_{t,2}\),而不是 \(x_{t,1}\le i \le x_{t,2},y_{t,1}\le j \le y_{t,2},z_{t,1} \le k \le z_{t,2}\)。因为当 \(i=x_{t,2}\)\(j=y_{t,2}\)\(k=z_{t,2}\) 时,对应的单位小正方体已经不属于这个长方体内了。所以必须是小于,不能是小于等于。

接下来,我们枚举坐标范围(即 \([0,100)\) 内)的每一个单位小正方体的坐标 \((i,j,k)\),那么如果这个小正方体和它相邻小正方形,即 \((i+1,j,k)\)\((i,j+1,k)\)\((i,j,k+1)\) 颜色不同,则说明它们所在的长方体有公共面。那么这样的方法就可以找到所有的有公共面长方体。

我们考虑对于每一个长方体开一个 set,如果长方体 \(i\) 与长方体 \(j\) 有公共面。那么就往 \(i\) 对应的 set 里扔一个 \(j\),同时往 \(j\) 对应的 set 里面扔一个 \(i\),由于 set 无重复元素,这样顺便也完成了去重。那么最后输出 \(1\)\(n\) 的每个正方体 \(i\) 的 set 的 size 就好了。

注意:如果题目不保证给定长方体两两不交,就不能这么做了。因为如果有交,同一个单位小正方形就可以同时被染成两种颜色,而这个做法必须保证染色的唯一性。

时间复杂度 \(O(100^3 \log n)\)(set 是 \(\log n\) 的复杂度)。

代码实现

//E
//The Way to The Terminal Station…
#include<cstdio>
#include<iostream>
#include<set>
using namespace std;
const int maxn=1e5+10;
const int maxx=105;
int X1[maxn],X2[maxn],Y1[maxn],Y2[maxn],Z1[maxn],Z2[maxn];
int col[maxx][maxx][maxx];set<int>s[maxn];inline int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}return x*f;
}void work(int xx,int xy,int yx,int yy,int zx,int zy,int t)
{for(int i=xx;i<xy;i++){for(int j=yx;j<yy;j++){for(int k=zx;k<zy;k++){col[i][j][k]=t;}}}
}int main()
{int n=read();for(int i=1;i<=n;i++){X1[i]=read();Y1[i]=read();Z1[i]=read();X2[i]=read();Y2[i]=read();Z2[i]=read();work(X1[i],X2[i],Y1[i],Y2[i],Z1[i],Z2[i],i);}for(int i=0;i<100;i++){for(int j=0;j<100;j++){for(int k=0;k<100;k++){if(col[i][j][k]!=col[i+1][j][k]){if(col[i][j][k]&&col[i+1][j][k]){s[col[i][j][k]].insert(col[i+1][j][k]);s[col[i+1][j][k]].insert(col[i][j][k]);}}if(col[i][j][k]!=col[i][j+1][k]){if(col[i][j][k]&&col[i][j+1][k]){s[col[i][j][k]].insert(col[i][j+1][k]);s[col[i][j+1][k]].insert(col[i][j][k]);}}if(col[i][j][k]!=col[i][j][k+1]){if(col[i][j][k]&&col[i][j][k+1]){s[col[i][j][k]].insert(col[i][j][k+1]);s[col[i][j][k+1]].insert(col[i][j][k]);}}}}}for(int i=1;i<=n;i++)cout<<s[i].size()<<'\n';return 0;
}

相关文章:

【题解】[ABC312E] Tangency of Cuboids(adhoc)

【题解】[ABC312E] Tangency of Cuboids 少见的 at 评分 \(2000\) 的 ABC E 题&#xff0c;非常巧妙的一道题。 特别鸣谢&#xff1a;dbxxx 给我讲解了他的完整思路。 题目链接 ABC312E - Tangency of Cuboids 题意概述 给定三维空间中的 \(n\) 个长方体&#xff0c;每个长方体…...

k8s服务发现之使用 HostAliases 向 Pod /etc/hosts 文件添加条目

某些情况下&#xff0c;DNS 或者其他的域名解析方法可能不太适用&#xff0c;您需要配置 /etc/hosts 文件&#xff0c;在Linux下是比较容易做到的&#xff0c;在 Kubernetes 中&#xff0c;可以通过 Pod 定义中的 hostAliases 字段向 Pod 的 /etc/hosts 添加条目。 适用其他方…...

python中有哪些比较运算符

目录 python中有哪些比较运算符 使用比较运算符需要注意什么 总结 python中有哪些比较运算符 在Python中&#xff0c;有以下比较运算符可以用于比较两个值之间的关系&#xff1a; 1. 等于 ()&#xff1a;检查两个值是否相等。 x y 2. 不等于 (!)&#xff1a;检查两个…...

Python网络编程详解:Socket套接字的使用与开发

Python网络编程详解&#xff1a;Socket套接字的使用与开发 1. 引言 网络编程是现代应用开发中不可或缺的一部分。通过网络编程&#xff0c;我们可以实现不同设备之间的通信和数据交换&#xff0c;为用户提供更加丰富的服务和体验。Python作为一种简洁而强大的编程语言&#x…...

Appium+python自动化(二十六)- Toast提示(超详解)简介

开始今天的主题 - 获取toast提示 在日常使用App过程中&#xff0c;经常会看到App界面有一些弹窗提示&#xff08;如下图所示&#xff09;这些提示元素出现后等待3秒左右就会自动消失&#xff0c;这个和我日常生活中看到的烟花和昙花是多么的相似&#xff0c;那么我们该如何获取…...

SpringBoot自动装配介绍

SpringBoot是对Spring的一种扩展&#xff0c;其中比较重要的扩展功能就是自动装配&#xff1a;通过注解对常用的配置做默认配置&#xff0c;简化xml配置内容。本文会对Spring的自动配置的原理和部分源码进行解析&#xff0c;本文主要参考了Spring的官方文档。 自动装配的组件 …...

1400*D. Candy Box (easy version)(贪心)

3 10 9 Example input 3 8 1 4 8 4 5 6 3 8 16 2 1 3 3 4 3 4 4 1 3 2 2 2 4 1 1 9 2 2 4 4 4 7 7 7 7 output 题意&#xff1a; n个糖果&#xff0c;分为多个种类&#xff0c;要求尽可能的多选&#xff0c;并且使得不同种类的数量不能相同。 解析&#xff1a; 记录每种糖…...

设计模式-备忘录模式在Java中使用示例-象棋悔棋

场景 备忘录模式 备忘录模式提供了一种状态恢复的实现机制&#xff0c;使得用户可以方便地回到一个特定的历史步骤&#xff0c;当新的状态无效 或者存在问题时&#xff0c;可以使用暂时存储起来的备忘录将状态复原&#xff0c;当前很多软件都提供了撤销(Undo)操作&#xff0…...

用合成数据训练托盘检测模型【机器学习】

想象一下&#xff0c;你是一名机器人或机器学习 (ML) 工程师&#xff0c;负责开发一个模型来检测托盘&#xff0c;以便叉车可以操纵它们。 ‌你熟悉传统的深度学习流程&#xff0c;已经整理了手动标注的数据集&#xff0c;并且已经训练了成功的模型。 推荐&#xff1a;用 NSDT设…...

人性-基本归因错误

定义 基本归因谬误指出&#xff0c;你评价别人的一个行为时&#xff0c;你会高估他的内部因素——比如性格的影响&#xff0c;低估外在的情景之类各种复杂因素的影响。 具体表现是对自己&#xff0c;我们很愿意分析复杂的原因&#xff1b;对别人&#xff0c;如果他一句话说的…...

游戏引擎:打造梦幻游戏世界的秘密武器

介绍 游戏引擎是游戏开发中不可或缺的工具&#xff0c;它为开发者提供了构建游戏世界所需的各种功能和工具。本文将介绍游戏引擎的概念、使用方法以及一个完整的游戏项目示例。 游戏引擎的概念 游戏引擎是一种软件框架&#xff0c;它提供了游戏开发所需的各种功能和工具&…...

ClickHouse(六):Clickhouse数据类型-1

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术&#xff0c;IT贫道_Apache Doris,Kerberos安全认证,大数据OLAP体系技术栈-CSDN博客 &…...

【Linux】网络基础

&#x1f34e;作者&#xff1a;阿润菜菜 &#x1f4d6;专栏&#xff1a;Linux系统网络编程 文章目录 一、协议初识和网络协议分层&#xff08;TCP/IP四层模型&#xff09;认识协议TCP/IP五层&#xff08;或四层&#xff09;模型 二、认识MAC地址和IP地址认识MAC地址认识IP地址认…...

小程序-接口概率性接收不到参数

在小程序上调用一个接口&#xff0c;传入筛选条件&#xff0c;但返回结果却没有进行筛选&#xff0c;概率性出现这种情况&#xff0c;频率较低。 然后在postman调用该接口&#xff0c;调用很多很多次&#xff0c;发现也出现这种问题&#xff0c;看了代码&#xff0c;接口的传参…...

合作客户销售数据可视化分析

以一个案例进行实际分析&#xff1a; 数据来源&#xff1a;【地区数据分析】 以此数据来制作报表。 技巧一&#xff1a;词云图 以城市名称来显示合同金额的分布&#xff0c;合同金额越大&#xff0c;则城市文字显示越大。 技巧二&#xff1a;饼图 下面制定一个&#xff0c;合…...

git仓库迁移场景

1.git仓库迁移 代码仓库从公网迁移内网&#xff0c;内外网网络不通&#xff0c;而且必须保证代码完整&#xff0c;包括分支以及提交记录。具体步骤如下 1.1 拉取所有分支镜像 1.2 现在本地电脑新建文件夹 mkdir newdir1.3 进入新建文件 newdir 执行下面命令拉取所有镜像代码…...

【RabbitMQ】之持久化机制

目录 一、RabbitMQ 持久化机制 1、RabbitMQ 持久化概述2、队列持久化3、消息持久化4、交换器持久化 二、RabbitMQ 知识扩展 1、内存告警与内存换页2、磁盘告警与配置3、数据写入磁盘时机4、磁盘消息格式5、磁盘文件删除机制 一、RabbitMQ 持久化机制 1、RabbitMQ 持久化概述…...

【项目6 UI Demo】前端代码记录

前端代码记录 1.GridListItem中的布局 在这个Item中的布局采用的是VBox和HBox相结合的方式。相关的代码如下&#xff1a; <VBox class"sapUiTinyMargin"><HBox justifyContent"SpaceBetween"><Titletext"{ToolNumber}"wrapping…...

【计算机网络】应用层协议 -- HTTP协议

文章目录 1. 认识HTTP协议2. 认识URL3. HTTP协议格式3.1 HTTP请求协议格式3.2 HTTP响应协议格式 4. HTTP的方法5. HTTP的状态码6. HTTP的Header7. Cookie和Session 1. 认识HTTP协议 协议。网络协议的简称&#xff0c;网络协议是通信计算机双方必须共同遵守的一组约定&#xff0…...

了解Unity编辑器之组件篇Layout(八)

Layout&#xff1a;用于管理和控制UI元素的排列和自动调整一、Aspect Ratio Fitter&#xff1a;用于根据宽高比自动调整UI元素的大小 Aspect Mode&#xff1a;用于定义纵横比适配的行为方式。Aspect Mode属性有以下几种选项&#xff1a; &#xff08;1&#xff09;None&#xf…...

如何使用Flask-Mail来发送电子邮件

你知道如何使用Flask-Mail来发送电子邮件吗 Flask-Mail是一个用于Flask框架的扩展&#xff0c;它简化了在Flask应用程序中发送电子邮件的过程。通过使用Flask-Mail&#xff0c;你可以轻松地创建邮件消息对象&#xff0c;设置发件人、收件人、主题和正文&#xff0c;并使用SMTP服…...

【笔记】Java并发编程

为什么不建议使用Executors创建线程池分析 不建议使用Executors来创建线程池&#xff0c;主要是有两大原因第一个是问题回溯的问题&#xff0c;使用Executors都可以使用默认的情况&#xff0c;无法用户自定义线程名称不利于排查问题&#xff0c;第二个原因也是最主要原因就是线…...

Hive内部表和外部表

表类型详解 表分类 在Hive中,表类型主要分为两种 第一种&#xff1a;内部表 也叫管理表表目录会创建在集群上的{hive.metastore.warehouse.dir}下的相应的库对应的目录中。默认创建的表就是内部表 第二种&#xff1a;外部表 外部表需要使用关键字"external"&#xff…...

【面试题】与通义千问的芯片前端设计模拟面试归纳

这里是尼德兰的喵芯片设计相关文章,欢迎您的访问! 如果文章对您有所帮助,期待您的点赞收藏! 让我们一起为芯片前端全栈工程师而努力! 前言 两个小时,与chatGPT进行了一场数字IC前端设计岗的面试_尼德兰的喵的博客-CSDN博客 和GPT-3.5的回答可以对比品尝,味道更好。 模…...

无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。npm.ps1 cannot be loaded

目录 原因 解决方法 提示 查看当前的执行策略命令 改回默认值 "Restricted"命令 这个错误提示是因为您的系统禁止执行 PowerShell 脚本。 原因 现用执行策略是 Restricted&#xff08;默认设置&#xff09; 解决方法 以管理员身份运行 PowerShell&#xff1a;右键…...

Flowable-服务-Http任务

目录 定义图形标记XML内容界面操作 定义 Http 任务不是 BPMN 2.0 规范定义的官方任务&#xff0c;在 Flowable 中&#xff0c;Http 任务是作为一种特殊的服务 任务来实现的&#xff0c;主要调用Http服务使用。 图形标记 由于 Http 任务不是 BPMN 2.0 规范的“官方”任务&…...

Hexo+GithubPages免费搭建个人博客网站

HexoGithubPages免费搭建个人博客网站 目录 一、前言二、Github配置 新建同名仓库配置Pages 三、安装Hexo四、配置hexo-deployer-git五、访问六、发布文章七、安装主题 一、前言 我之前开了好几年的云服务器了&#xff0c;实际上使用场景并不是很多&#xff0c;感觉有点浪费…...

应用无线鼠标中的2.4GHz无线收发芯片

无线键盘和无线鼠标作为现代办公环境中常见的工具&#xff0c;为我们的工作带来了便利。无线键盘和无线鼠标的工作原理都是基于无线技术实现的&#xff0c;其中常见的是2.4GHz无线技术。让我们一起来详细了解一下它们的工作原理。 无线鼠标的原理非常简单,鼠标部分工作与传统鼠…...

Oracle 时间多少秒以后 oracle interval 多少分钟之前 Oracle日期1小时后 Java时间多少秒以后 Java日期多少天之前

Oracle 时间多少秒以后 oracle interval 多少分钟之前 Oracle日期1小时后 Java时间多少秒以后 Java日期多少天之前 一、概述 在项目开发中&#xff0c;遇到一个类似于 超时关闭的订单&#xff08;超过1分钟后关闭订单&#xff09; 的需求&#xff0c;在数据的时间写入时&#x…...

自动驾驶之轨迹规划8——Apollo参考线和轨迹

1. abstract 本文主要讲解routing和planning模块中的reference line&#xff0c;我之前一直搞不明白这个reference line是如何生成的&#xff0c;有什么作用&#xff0c;和routing以及planning的关系。现在有了一些心得打算梳理一下&#xff1a; 决策规划模块负责生成车辆的行…...