首页 > 其他分享 >NOIP 2024 题解

NOIP 2024 题解

时间:2024-12-07 21:21:10浏览次数:6  
标签:le log NOIP 题解 可以 一段 2024 LCA 区间

NOIP 2024 题解

T1

首先对于两个串都不能动的位置,直接统计是否相等。

对于连续的一段能动的位置,这一段的数可以随便交换,可以预处理每个位置属于哪一段,以及这一段中 0 和 1 的个数。

我们贪心地考虑,优先匹配一个串能动,另一个串不能动的位置。可以感受到,先把不能动的位置匹配掉后,剩下的位置是两个串都可以随便移动的,剩下的位置限制会更松,于是这样是比较优的。

最后处理都能动的位置,我们贪心地能匹配就匹配,因为匹配和失配的贡献都是 1,所以与匹配的顺序无关。

时间复杂度 \(O(Tn)\)。

T2

按照确定的点分段,考虑到每一段都是独立的。

考虑求每一段合法的方案数,正难则反,用总数减去不合法的方案数。

不合法的方案数就是设左边值为 \(x\),右边为 \(y\),构造一种条件形如当左边为 \(x\) 时右边不为 \(y\)。

这就要求这一段前后连起来,且最后一个值不为 \(y\),大概就是:

\[V^{len}\times (V-1) \]

再考虑开头的和结尾的两段,发现怎么取都是合法的。

我们需要快速幂,时间复杂度 \(O(Tm\log n)\)。

T3

T4

\(O(Qn\log ^2n)\sim O(Qn\log n)\)

考虑枚举长为 \(k\) 的段,求 LCA。
一段的 LCA 就是每次加一个点求 LCA,也可以是合并两个子区间的 LCA。

可以考虑线段树上合并区间 LCA,每次合并用倍增实现 \(O(\log n)\),也可以在欧拉序上 \(O(1)\) 求 LCA。

\(O(Qn+n\log ^2n)\sim O(Qn+n\log n)\)

可以用 ST 表代替线段树,预处理 ST 表合并时可以倍增 \(O(\log n)\) 也可以 \(O(1)\) 求 LCA。

另外,也可以求区间欧拉序的最小最大值,类似欧拉序两个点的 LCA,求 RMQ,这样也能做到 \(O(nQ+n\log n)\)。

性质 B

上面的做法可以直接通过性质 B。

性质 A

考虑整体二分,就要实现一个数据结构,支持加入或删除一个点,然后查询区间内最长连续段的长度是否大于等于 \(K\)。

可以用线段树实现,时间复杂度 \(O((Q+n)\log ^2n)\)。

\(O((Q+n)\log^2 n)\)

如果有强大的观察能力或联想能力,可以发现一段区间的 LCA 的深度就是相邻两个点的 LCA 深度的最小值,即

\[\min\{\text{dep}_{\text{LCA}(i,i+1)}\} \]

证明就是,考虑这一段区间的 LCA,这段区间的点分布在 LCA 的不同子树内,则一定有 \(i,i+1\) 跨在不同子树内。

于是就转化为了性质 A。

\(O((Q+n)\log n)\)

考虑对于每个点 \(i\),设 \(s_i=\text{dep}_{\text{LCA}(i,i+1)}\),求出 \(\min_{l_i\le j\le r_i}\{s_j\}=s_i\) 的极大区间 \((l_i,r_i,s_i)\)。

设询问区间为 \((L,R)\),就是求 \((l_r,r_i,s_i)\) 与 \((L,R)\) 的交大于等于 \(K\) 的区间的最大 \(s_i\)。

分类讨论,当 \(r_i\le R\) 时,要满足

\[L+K-1\le r_i\le R \land r_i-l_i+1\ge K \]

当 \(r_i\ge R\) 时,要满足

\[l_i\le R-K+1\land r_i\ge R \]

前者对 \(r_i-l_i+1,K\) 扫描线,后者对 \(r_i,R\) 扫描线。

具体地,把做扫描线的量排序,然后双指针把另一个量加入数据结构中或在数据结构中查询。

前者 \(L+K-1\le r_i\le R\) 可以线段树,后者 \(l_i\le R-K\) 可以树状数组。

当 \(K=1\) 时,需要特殊处理,直接用数据结构查区间最值。可选 ST 表。

时间复杂度 \(O((Q+n)\log n)\)。

标签:le,log,NOIP,题解,可以,一段,2024,LCA,区间
From: https://www.cnblogs.com/dccy/p/18592686

相关文章

  • 2024 IntelliJ IDEA安装使用教程(附激活,含常见问题解答)
    第一步:下载IDEA安装包访问IDEA官网,下载IDEA也可以在这里点击下载idea(含博主使用版本)下载idea第二步:安装IDEA点击xx关掉程序!第三步:下载补丁IntelliJIDEA补丁文件点击获取补丁下载成功后,打开标注的文件文件夹,进入到文件夹/jetbra注意:这个文件夹单......
  • 洛谷P10244 String Minimization 题解
    题目传送门思路本题就是让你求\(a\)字典序最小时的\(b\),毕竟他说在\(a\)的字典序尽量小的前提下。接下来就做这个判断:如果\(a_i\)<\(c_i\),则\(b_i\)和\(d_i\)交换。如果\(a_i\)<\(c_i\)且\(b_i\)>\(d_i\),则\(b_i\)和\(d_i\)交换。其余情况不用交换。......
  • ABC382 C-F题解
    C-KaitenSushi把寿司都放到一个堆里,从前往后扫\(A\)数组,如果当前食客\(A_i\)小于等于堆顶,就取出堆顶,记录这份寿司被第\(i\)个人吃掉。复杂度\(O(n\logm)\)。D-KeepDistance搜索回溯,但每一步从\(10\)枚举到\(m\)会超时,剪一下枝for(inti=10;res.back()+......
  • CMake学习2024.12.7问AI的问题记录
    iwtbf:target_include_directories(&{PROJECT_BINARY_DIR})是什么GitHubCopilot:target_include_directories是CMake中的一个命令,用于为目标添加包含目录。&{PROJECT_BINARY_DIR}是一个变量,表示项目的二进制目录。语法如下:target_include_directories(<target>[SYSTEM......
  • 【题解】洛谷P6225: [eJOI2019] 异或橙子
    P6225[eJOI2019]异或橙子结论题,要手玩几组样例就懂了,发现长度为偶数的最后削为0,否则的话下标为奇数答案就是区间下标为奇数的异或和,偶数相同,所以考虑用两个树状数组分别维护下标奇偶数的异或前缀和,然后再异或区间。#include<bits/stdc++.h>//#defineintlonglong#define......
  • # 2024-2025-1 20241310 《计算机基础与程序设计》第十一周学习总结
    2024-2025-120241310《计算机基础与程序设计》第十一周学习总结作业信息这个作业属于哪个课程2024-2025-1-计算机基础与程序设计这个作业要求在哪里2024-2025-1计算机基础与程序设计第一周作业这个作业的目标自学教材《计算机科学概论(第七版)》第15,16章和《C语......
  • NOIP2024 游记
    8:00到考场,感觉有点困,小睡了一会。8:30开考。先通读了一遍题面。感觉T1T2很可做,差不多有了思路。T3感觉非常神秘,T4则是有一点想法,但不是很多。于是还是选择了顺序开题。感觉T1直接贪心就是对的,但是细节也许有点多。在写的时候注意了一下实现,大概在9:00左右过了T1。......
  • 2024/12/7课堂记录
    你好哈哈18:11:3118:11:3218:11:3218:11:3418:12:48大的大的你好#include《iostream》markmark                                               哈哈 ......
  • 南京理工大学《2024年873自动控制原理真题》 (完整版)
    本文内容,全部选自自动化考研联盟的:《南京理工大学873自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~目录2024年真题Part1:2024年完整版真题2024年真题......
  • 上海大学《2024年915专硕自动控制原理真题》 (完整版)
    本文内容,全部选自自动化考研联盟的:《上海大学915自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~目录2024年真题Part1:2024年完整版真题2024年真题......