CF div2 997(A~E)

news/2025/1/22 14:46:05/文章来源:https://www.cnblogs.com/jjjxs/p/18677981

赛时3题,比上一把还要手速场。虽然手速慢了一些,但好在没掉分,并重新回到蓝名了。

A

很套路的题目。第一次移动没有用,把其余方向的移动距离求和加边长,取2倍就是答案。

code

B

相当于告诉了你一个排列中任意一对\(i<j\)的前后位置关系,比如:

  • \(g[i][j] = 0\),代表\(i\)\(j\)前面
  • \(g[i][j] = 1\),代表\(i\)\(j\)后面

取整个\(n*n\)矩阵的上三角矩阵(保证\(i<j\))。对于每个\(i\),枚举第\(i\)行中\(1\)的个数(设其为\(cnt\)),即代表在排列中\(i\)后面有\(cnt\)\(>i\)的数。按照从\(1到n\)顺序确定每个元素在排列中的位置。

确定每个数位置的具体做法:倒序枚举排列的每个位置,最终后面 有\(cnt\)个空位置 的空位置即为 第\(i\)个元素的位置(因为是顺序枚举,保证了插入过的数都是\(<i\)的数,所以空位置上的数都将成为\(>i\)的数。而\(cnt\)代表\(i\)的后面\(>i\)的元素数量,即为空位置的数量)

code

C

见到过的最\(sb\)的div2 C,不过也被这道诈骗题硬控了\(40min\)

想一下,题目并没要求最长回文串的长度,故可以猜想:这个最长回文串长度越短,数量可能就会越多。由于\(1到n\)的排列就已经有\(n\)个最长回文串了(最长为1,每个数作为一个回文串),若要保证最后构造的序列的最长回文串数量\(>n\),显然这个最长回文串的长度不能是\(1\),也不能是\(2\)(这种情况必须要相邻的一对相同数字才行,显然数量不够)。故考虑构造最长回文串长度为\(3\)的序列即可。构造方式有很多,随便试一个就可以了。注意某些构造方式的\(n=6\)情况需要特判。

code

D

中位数&子区间相关\(trick\)

回顾一下这个\(trick\):对于一个序列,设定一个中位数\(x\),并对这个序列做一一映射:

  • \(>=x\)的数映射为\(1\)
  • \(<x\)的数映射为\(-1\)

设映射后的数组为\(b\),并求出其前缀和数组\(preb\),这样就能快速判断出该序列的任意子区间的中位数和\(x\)的大小关系。考虑区间\([l,r]\),设该子区间的中位数为\(mid\)

  • \(preb[r] - preb[l - 1] >= 0\),则一定有\(mid >= x\)
  • \(preb[r] - preb[l - 1] < 0\),则一定有\(mid < x\)

证明略

这样就可以解决中位数,子数组结合起来的相关问题。比如要求出中位数\(>=x\)的子数组数量,就可以处理出\(preb\),问题转化为求满足\(preb[r] - preb[l - 1] >= 0\)\([l,r]\)的个数。

同时,中位数还经常与二分结合,因为中位数一般会和单调性相关。比如这道题:CF947C

应用:确定某个子数组的中位数:直接二分中位数(\(O(logn)\)),根据这个中位数处理出对应的\(preb\)数组(\(O(n)\)),看\(preb[r] - preb[l - 1] 是否 >= 0\)即可,最后用二段性确定出中位数。

回到本题。题意就是要对一个数组统计出 偶数长子数组排序后最中间的两个数 相同的子数组的个数,这里可以将这两个数理解为两个中位数。

由于\(a_i<=10\),故可以考虑枚举中位数\(x\)\(1到10\)中的某个数,然后处理出对应的 \(b\)\(preb\) 数组。若对应某个\([l,r]\)有:\(preb[r] - preb[l - 1] == 0\),则这个区间一定是不好的数组(一半\(1\)一半\(-1\),最中间的两个数一定是左侧的映射为\(-1\),右侧的映射为\(1\),这两个数一定不同。反之不成立,因为映射的数相同不代表原来的数相同)。由此可见,统计不好数组的数量会比统计好数组数量容易。因此转换思路,求原数组中不好数组的总数量。

按照上述想法,直接枚举每个中位数,并看满足 \(preb[r] - preb[l - 1] == 0\)\([l,r]\)数量即可。但这样还是不对,问题就在于会重复统计某一个不好数组的贡献,因为对于不同的中位数,映射的序列可能会是相同的,而每个不好数组的贡献只需要被统计一次。

那怎么避免重复统计贡献呢?由于每个子区间的中位数是唯一的,而在枚举过程中也枚举到了所有可能的中位数。故可以这样想:在枚举某个中位数时,若统计到了某个子数组的\(preb\)区间和为\(0\),那么只有当这个数组中出现了这个中位数时才统计贡献,否则不统计。这样就只需要额外判断一下该子区间内是否存在正在枚举的中位数即可,保证了只有在枚举到该子数组中位数时才会被统计贡献,进而保证了唯一性。

判断某个数是否在子区间内出现:由于值域很小,故对每个数预处理一个高维前缀和即可。

复杂度:\(O(10n)\)

code

E

卡特兰数 + 递归

首先对于题目中“任意一对线段 互相包含 或者 互不相交” 的性质,可以想到卡特兰数中的括号序列(任意一对括号也满足互相包含或互不相交),因此可以想到卡特兰数。

现在考虑某一条线段的拆分:可以拆成两个或多个连续的线段。但显然直接拆为两条线段的情况才能对应总线段数最多的情况,因为\(>2\)条连续的线段可以被两条更长的线段所囊括。因此拆任意一条线段时,一定是先拆为两条线段,再继续对这两条线段做拆分,这样才能保证总线段数最多。

而每一条线段可以想象为一个结点,在该线段内拆分出的子线段对应该结点的子节点,这样形成的结构就是一个树。又由上段可知,形成的树一定是一棵二叉树,并且每个结点要么无子节点,要么有两个子节点(即广义上的满二叉树),而叶节点对应的是每一个\(l <= i <= r\)\([i,i]\),故对于长为\(len\)的线段,必含有\(len\)个子节点。由卡特兰数的性质:\(含n+1\)个叶节点的广义满二叉树的形态数为\(Catalan(n)\),可以直接计算出长为\(len\)的线段经拆分后的方案数。

\(m=0\),则方案数即为\(Catalan(n-1)\),因为线段\([1,n]\)内部没有限制,可以随意划分二叉树的结构。但当\(m!=0\),即有固定的线段时,有些二叉树形态就不满足要求了。

可以将每一个固定的线段想象为一个特殊的结点,该结点特殊在——其内部还可以继续做划分。这样就可以递归地处理该问题了。具体细节见代码。

复杂度:\(O(n)\)

code

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

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

相关文章

人工智能创新型教师培育计划(第一期)

Skip to contentOpenHydraSearchKMain Navigation首页 课程新一代人工智能经典实验【中学】 XEdu系列【中学】 中小学AI开源课程倡议使用指南活动获取支持On this page人工智能创新型教师培育计划(第一期) 一、组织单位 二、活动背景 三、活动内容 四、活动安排 五、师资介绍…

前置数学

一些必要 trick推式子,先提 \(\sum\) 和 \(\Pi\) 到最前面,然后从后往前合并,必要时考虑更改 \(\sum\) 的取值 看到次方变为斯特林数,\(x^n=\sum\limits_{i=0}^{n} {n \brace i}{x \choose i}i!=\sum\limits_{i=0}^{n}\sum\limits_{i=1}^m{(-1)^{m-i}\frac{i^n}{(m-i)!}}{x…

MUX-VLAN

MUX VLAN(Multiplex VLAN)是一种高级的VLAN技术,它通过在交换机上实现二层流量隔离和灵活的网络资源控制,提供了一种更为细致的网络管理方式。 一、基本概念 MUX VLAN分为主VLAN(Principal VLAN)和多个子VLAN(Subordinate VLAN)。 主VLAN是MUX VLAN配置中的核心VLAN,它…

OpenWrt 挂载 SMB

通过OpenWrt挂载smb存储,并再通过smb分享(实现分布分享统一入口?)添加用户 依赖 opkg install shadow-common opkg install shadow-useradd添加 smb 专用用户 useradd YOUR_SMB_USER_NAME将用户与 smb 服务关联 smbpasswd -a YOUR_SMB_USER_NAMEOpenWrt 设置 挂载 SMB 网络共…

高效批量工作流导入及脚本上线,利用DolphinScheduler接口轻松实现

实现了批量生成DolphinScheduler的任务,当导入时发现只能逐个导入,因此通过接口实现会更方便。 DolphinScheduler接口文档 DolphinScheduler是有接口文档的,地址是 http://IP:12345/dolphinscheduler/swagger-ui/index.html?language=zh_CN&lang=cn不过这文档写的比较简…

IDEA如何打开每日提示?

前言 大家好,我是小徐啊。我们在使用IDEA开发Java应用的时候,经常需要使用IDEA的各种各样的技巧,提示。这个在每次IDEA打开的时候,会自动弹出来。但有时候,我们可能不小心把这个提示设置成关闭了,导致后面打开IDEA的时候,再也不弹出这个提示了。这样我们可能就不能很全面…

如何用vscode打开obj、glb文件,查看3D文件

方案1:安装插件 3D Viewer for VSCode,安装完可以查看obj 但是不懂为啥是白色的 glTF Tools,安装完可以查看gltf 启动位置在右上角:白色小山的图标 这个效果不错,看起来比较舒服。 但是gltf从哪里来呢? 首先我们有一个glb文件,右键它,点击倒数第二行的“glTF: import …

时间序列平稳性的双重假设检验:KPSS与ADF方法比较研究

在进行时间序列分析之前,确定序列的平稳性是一个关键步骤。平稳性指的是时间序列的统计特性(如均值和方差)在时间维度上保持不变。本文将详细介绍如何运用 KPSS 检验和 Dickey-Fuller 检验来验证序列的平稳性。这两种检验方法基于不同的统计假设:KPSS 检验的原假设是数据非…

Svelte 最新中文文档翻译(4)—— 符文(Runes)下

前言 Svelte,一个非常“有趣”、用起来“很爽”的前端框架。从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1:Svelte 以其独特的编译时优化机制著称,具有轻量级、高性能、易上手等特性,非常适合构…

固定测斜探头 土体位移变化数据支持 助力工程监测 无线传输

固定测斜探头 土体位移变化数据支持 助力工程监测 无线传输FI系列固定测斜探头是一款专为土体内部位移变化监测而设计的高精度测量仪器。无论是深基坑开挖、地铁地基、公路地基、挡土墙、坝体、尾矿库还是山体滑坡等工程项目,我们的测斜探头都能提供准确可靠的数据支持。该测斜…

研发效率低下?试试这些改进方法

最近这段时间,互联网上发生了很多大事:极越汽车突然宣布破产解散;养乐多上海工厂关闭;网传海信大规模裁员;……2024年即将结束,如果给2024年打个标签,有人说是“愈加魔幻”的一年,有人说是“挑战激增”的一年,也有人说是“生存指数飙升”的一年。 根据裁员追踪机构lay…

复现一下最近的湘岚杯的pwn部分

前言 pwn萌新一枚,这次湘岚杯pwn题只出了两道,后面orw写了exp但是一直打不通,后来发现思路错了。宇宙射线这题很新颖,虽然比赛期间没有做出来,但是赛后复现时学到了很多东西,还是很开兴的。题解过程 ret2text签到 解题思路: ​ 这题是pwn题中的签到题,题目描述也很清晰…