XN2025 集训记录 D2

news/2025/3/26 23:12:36/文章来源:https://www.cnblogs.com/youlv/p/18788350

XN2025 集训记录 D2

又是摆烂的一天 , 感觉打模拟赛时候的自己和改题时的自己完全不是一个人 . 不过往好了想 , 至少足够的模拟赛量 , 意味着我的高效率时间虽然不多 , 但是还有 .

买了个usb转网线 , 破费 39.99 然后这里的网线是静态ip , 插上用不了 , 我.....

这后面的电脑只能彻底沦为背景图片播放器了 . . .

豪堪

还是模拟赛 , 120/300 .

感觉状态整体来说还凑合 , 这两天的 T1 都大幅度可做 , 所以还是没那么平行地开完了 T1 才去完全思考 T2 和 T3 . 不过应该警醒一下不要对切 T1 又产生心理依赖了呃呃 .


T1 题意

\(n\times n\) 网格 , 其中 \(m\) 个染黑 , 无限次执行操作 :

  • 如果一个点没有染黑 , 并且与至少两个黑点邻接 ( 四联通 ) , 可以把它也染黑 .

求最大黑色点数 . \(n,m\le 10^6\) .


这玩意一开始看上去像是个答案有限的简单题啊 , 大概就是联通原来的黑点的次数是 \(O(n)\) 的 , 而且看了眼样例 , 答案确实不大 (NOI2024D2T1的教训罢了) . 就觉得可以暴力找可以联通的点 .

( 这里是伏笔 . )

然后手玩一下发现 , 连通块的边缘处 , 只要出现了向内凹的位置 , 这个位置必然可以染黑 , 因此每个连通块能不断操作直至补成一个矩形 .

这样形式变好看了 , 相当于曼哈顿距离 \(\le 2\) 两矩形合并成最小包含矩形 , 缺点是刚才的次数分析就炸了 , 因为显然 , 矩形合并完全可以造出一个大矩形 .

这不是原题吗 ?


T1 思路

记得那还是寒假的时候 , 我打了一场 Acc 模拟赛 , 反正打的过程很摆 ( 省选之前一直是模拟赛状态摆 , 结果现在反过来了 ) . 当然还是努力去冲了 T1 , 大概意思是这样的 :

平面内给 \(m\) 个矩形 , 如果两个矩形有位置重合就合并成能包含它们的极小矩形 , 求合并后的所有矩形 .

这题一看上去挺纯良的 , 思路很清晰 , 逐一插入矩形 , 和所有重合矩形合并后 , 矩形变大 , 重复合并过程 , 直到无法合并 . 只要随便找点办法维护矩形查询并删除所有有重合位置的矩形 这东西就好了 .

然后有一些看上去纯良的分讨 , 但是总会丢情况 , 而这道题就越做越毒瘤了 .

那么回到一个 DS 上 , 这个就是最纯的树套树可持久化维护平面 , 一维扔线段树 , 一维随便扔给 treap 或者 std::set , 然后有一个经典的讨论 :

因为可持久化没有pushup操作 , 从根到底插入时又一路上都插入了点 , 相当于每个线段树节点维护子树信息 .

因此查询时对跑出的 \(log\) 个区间查询子树 , 就得到的所有与查询区间有交的信息..... 吗 ?

考虑到这样做覆盖查询区间的线段不会被计入 , 为了弥补 , 还要在查询时 , 查询一路上的节点对应的信息 , 当然这个信息不是子树信息 , 而是恰好落到这个节点的线段的信息 .

也可以分成两部分来看 :

  1. 插入时单点插入区间端点 \(L,R\) , 查询时查询区间内的这些端点 .
  2. 插入时覆盖 \([L,R]\) 对应的 \(log\) 个节点 , 查询时单点查询区间端点 \(L,R\) .

因为两条线段有交 , 至少会有一个线段的端点被另一个包含 , 因此这样分治是合理的 .

到这里这道题有了 \(n\log^2n\) 做法 , 还过不去 .

考虑内层树是否真的有必要 : 可以对内层树维护的维度 (例如内层树 \(x\) , 线段树 \(y\)) 进行扫描线 , 按照 \(x\) 从小到大插入 , 这样 , 对于同一个线段树节点 , 肯定是后插入 , \(x\) 大的矩形更容易和新矩形合并 , 优先被取出 , 用一个栈维护 , 复杂度变为 \(O(n\log n)\) .

这道 T1 的做法就一模一样了 . 当然这道题的条件是曼哈顿距离 , 具体讨论一下分成 \(3\) 种情况做矩形查询即可 .


本机测的时候在 \(m=10^6\) 的大样例上获得了 \(8s\) 的好成绩 !

后来发现是电源计划给 CPU 锁频了 , 调整了一下还是 \(4s\) , 也学不明白这么个巨大常数线段树 \(log\) 题要开 \(1e6 , 3s\) , 还要绑 subt , 最大的 sbut 还要放 \(55\) , 不甘心正解拿 \(45\) 卡了一个小时常也没卡明白就跑路了 .

还是挂到了 \(45\) , 有几个点后面调也死活不过 , 卡在\(3.9s\) 这里 .

看完 std 后乌鱼了 , 它真的觉得矩形合并执行次数很少 , 下数据点也证明 , 数据里的合并次数很少 ( 然而构造出大量合并的数据并不难 ) ,然后出题人 std 是个逆天讨论然后合并 \(2\) 步就完事 .

怪不得这么出 .

最后用下数据特判改过了 ( 真的是题有问题 ) .

然后是 T2 , 很有趣的 dp .


T2 题意

老规矩偷懒 .


T2 思路

这个题比较显然的 dp .

考虑对于一个移动过程 , 如果不考虑左右限制 , 结果只会是所有位置向左/右平移了若干位 .

而有了这个限制后 , 首先能确定出从第一轮开始有些位置就输了 , 然后有些点因为左边的阻挡会和 \(1\) 合并起来 , 其余仍然是整体移动的现象 .

考虑如果整体移动是右移的话便样衰了 , 因为无限轮后所有点一定不断右移然后掉下去 .

考虑左移或不动 . 首先那些没有合并起来的点显然可以 , 而那些合并起来的点 , 在下一轮时仍然处在会被合并的位置上 , 所有也可以 , 因此考虑 dp 出所有情况下的整体移动 , 那些位置掉下去了 , 以及哪些位置与 \(1\) 合并了 . 也就是一个前缀会被这个序列贡献 .

具体地 , 设 \(f_{cnt,i,j,k}\) 表示考虑前 \(cnt\) 步 , 起始的位置 \(1\) 来到了位置 \(i\) , 前 \(j\) 个数和 \(1\) 合并在一起 , 前 \(k\) 个数还没有掉下去 . 转移是容易的 , 最后遍历所有状态 , 每次给前缀贡献 , 差分一下就好了 , 复杂度 \(O(n^3m)\) .

考虑优化状态 , 但是发现 \(j,k\) 代表的是一个历史最值的形式 , 是难以替代的 , 考虑换个角度看 .

考虑直接对每一个点算贡献 .

首先如果这个点没有被合并 , 那么只要它一轮后没掉下去 , 而且左移或不动 , 根据刚才的分析 , 直接贡献给这个位置 .

然后如果被合并了比较难办 , 因为合并后的点 , 满足要求的 , 不一定是左移 , 也有可能被合并的这个位置带得向右移 . 我们发现在这种情况下 , 点最后会到达一个不动点 \(k\) 处 , 而 \(k\) 就是作为合并的一个点 , 恰好走到了原位 , 考虑用 \(k\) 在做前缀贡献前面的所有右移但是合法的点 , 当然还有一些合并点仍然左移 , 直接统计即可 .

这样的复杂度是 \(O(n^2m)\) 的 , 这是为什么呢 .

对整体计算不可避免两个最值形式的状态 , 然而 , 对于单独一个点来说 ,掉下去和合并 (合法状态) 只可能发生其中一个 , 因此 dp 时相当于只对其中一维做了记录 (事实上掉下去的状态都被直接扔掉了 ) . 然而单点处理不好做的是判断右移的点是否会到达一个不动点 , 通过刚才的整体分析 , 用不动点前缀更新的方式就解决了 .

真的很有意思的好题 .


T3 题意


T3 题解

这题解说的是人话吗 😰

盯了一晚上题解和std ( 太颓了啊真的是 ) 算是大概口胡出来这个题在干什么了 .

首先建虚树是正常操作 , 考虑数连通块数量 , 可以通过数有多少条边存在来算连通块个数 . 这里的边是原树上一堆边的合并 , 它存在的条件是对应的区间包含于 \([L,R]\) . 这是一个简单的二维偏序 .

然而这里有问题 , 因为建虚树的时候加入了一些不应该贡献的虚点 , 我们考虑把它们的贡献减下去 .

要剪掉的就是所有只包含虚点的连通块个数 . 考虑这样的连通块个数会在以下情况下改变 :

  • 一个虚点连通块合并了一个实点 .
  • 两个虚点连通块合并起来了 .

前部分是容易的 , 考虑一段实点一端虚点的边 , 它只会影响这个虚点的贡献 .

考虑对于一个虚点 , 在扫描线的过程中 , 不断有这样的边加入 , 可以尝试替换当前把这个虚点和其他实点合并的边 , 也是简单的偏序问题 .

难点在于后面 , 因为这一下 , 两个虚点之间的边不能独立地贡献其中某个虚点了 , 题解的惊世智慧告诉我们要通过构造点分树的形式 , 来钦定出哪个虚点负责贡献 .

因此两端都是虚点的边加入时 , 把贡献算在深度较大的那个点身上就好了 .

但是还有更麻烦的事情 , 深度较大的那个点相连的实点仍然有可能贡献 , 相当于把这些贡献转移给了深度较小的点 . 不过通过均摊分析 , 这些转移边之间存在的偏序关系使得实际区间数可接受 , 所以直接在点分数上处理出可能贡献的区间 .

越想越晕了这个题 .


结果就是又在模拟赛和摆一下午中度过了一天 , 不管怎么说这些题目怪有意思的还是 .

饭还挺好吃的 , 中午有肉夹馍 , 晚上有羊血粉丝 , 都不错 .

因为用热点的缘故不得不省着用流量了 , 只好翻来覆去听走之前下载的 Vessels 这张专 , 结果发现整专听歌好舒服 , 因为有前后衔接情绪流很足 , 有一些单听根据没那么抓耳的歌 , 放进一起一下好听了 .

不管怎么说应该还是有收获的吧 . 连着两次模拟赛 , 发挥不算差 ( 然后突然发现忘了苍穹计划了 ) , 如果能把赛事状态不断拿出来 , 感受和调整 , 也是挺有意义的. 就是还是觉得非赛时这题改着改着就半天过去 , 盯一个题解盯一晚上 , 做题也云起来了 ,真的矛盾 .

不管怎么说用一天消化一套模拟赛也算是有点意义了 . 明天做专题才是最狂野超乎想象的颓废 .


突然好想念 lx 老师 , 曹队 , 还有 23 年跟着去北京的高二学长们 . 从 24 年冬天集训那一趟开始就时常怀旧 , 这次更是特别明显 . 好怀念以前啊 .

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/904386.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于对偶二次曲线的快速椭圆检测

利用对偶二次曲线可精确求解椭圆圆心坐标。1、对偶二次曲线原理 二次曲线也称圆锥曲线,其几何定义是一个平面与两个顶点相对的圆锥相交所产生的交线。通常二次曲线指的是点二次曲线,它是定义在曲线点上的方程。而在射影几何中,齐次点和齐次线存在着可以互换的二元关系,因此…

【程设の旅】Python速通作业三

这节课老师讲了Python的面向对象部分 速度比较快 但是结合前面cpp的大部分知识可以弄懂 最后一道题估计是py特性了 可以理解但是那两个函数不知道是什么鬼 01:运算符的实现 描述 程序填空class A:def __init__(self,x):self.x = x // 在此处补充你的代码 a,b,c = map(int,input…

C/C++开发文档和常用的输入方式汇总

前几天复习的几种输入方式和帮助文档C/C++开发文档获取 之前下载过应该开发文档,今天push到了Gitee上了。可以随时获取,链接字符串操作 C 字符串 | 菜鸟教程 输入输出【包含字符串】 C 输入 & 输出 | 菜鸟教程 #include<stdio.h> int main() {char s[20];int i = 0…

Eino overview

一段话总结 Eino 是基于Golang的大模型应用开发框架,通过组件抽象(如ChatModel、Tool、Retriever)和图编排能力(Chain/Graph/Workflow)简化LLM应用开发。其核心优势包括类型安全的流处理、并发管理、切面注入以及开箱即用的最佳实践,支持构建复杂智能体(如ReAct)和多模…

llm 量化技术综述

综述: LLM 量化 1. Intro 低比特量化主要是减少tensor的bit-width,可以有效减少内存以及计算需求;主要可以压缩权重, 激活值, 和梯度,使得可以在受限资源的设备上使用。 2. 低比特LLM的基础 在这一届,我们主要引入从以下三个方面讨论:low-bit 数值格式 量化粒度 动态或者静…

Top 出海 AI 公司招技术!HIX.AI Pollo.ai | 深圳

HIX.AI & Pollo.ai 招聘高级海外 AI 产品经理 (25-45K) 岗位职责:负责Web 端海外 AI 产品的规划与策划,负责产品需求分析及原型设计,并制定方案推动产品研发落地; 进行产品/竞品调研,了解用户需求,分析、发现需求本质,并给出对应的解决方案; 有效对接开发、测试、运…

2、切片

一:字符串的下标(索引)--重点 ​ Ⅰ:字符串的特性,被称为下标或者 sequence(序列) ​ Ⅱ:一个序列。若干元素组成 ​ Ⅲ:字符串的下标从0开始》标记每个元素的位置,用来获取元素》从左到右,从0开始> a[0],a[1] ,a[3]》可以用正数表示,也可以用负数表示》最…

WEBGL 学习使用代码

目录杂七杂八第一节 绘制出了一个点第二节 动态传递点数据第三节 缓冲区和画线第四节 彩色线段第五节 单个 buffer 渲染颜色第六节 抽离代码 & 画彩色三角形第七节 图元的七种绘制方式第八节 uniform 传值变换数据第九节 旋转矩阵三角函数矩阵的计算推导代码实现第十节 线框…

Kettle 版本这么多,到底该怎么选?

Kettle(Pentaho Data Integration)作为一款功能强大的开源 ETL(Extract, Transform, Load,即数据抽取、转换和加载)工具,拥有众多版本,这让许多用户在选择时犯了难。 1、提出问题 经常有群友提出使用kettle版本的问题,如下图所示:2、kettle版本 有许多的的历史版本,…

C++实验二

实验一#include <stdio.h>#include <stdlib.h>#include <time.h>#define N 5int main() {int number;int i;srand(time(0)); // 以当前系统时间作为随机种子for(i = 0; i < N; ++i) {number = rand() % 100 + 1;printf("20490042%04d\n", n…

ESP32 Audino 驱动12864点阵屏 自定义中文字库

一.安装u8g2 #include <Arduino.h> #include <U8g2lib.h>U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/U8X8_PIN_NONE, /* clock=*/22, /* data=*/21); // ESP32 Thing, HW I2C with pin remappingvoid setup(void) {u8g2.begin();u8g2.enableU…