2月做题记录

news/2025/2/4 20:35:56/文章来源:https://www.cnblogs.com/LuoyuSitfitw/p/18697350

2月做题记录

✩ trick
✯ 会大部分,要\(tj\)提示
✬ 会小部分/完全没想到,看了\(tj\)才会
◈ 脑电波
✡ 有某一算法的神秘通用性质
⊗ 待补

目录
  • 2月做题记录
  • 字符串
    • CF1827C
    • CF1913F
    • P10716
    • P11150 ✩✯
    • [NOI2021] 轻重边
            • 做法1 ✩
            • 做法2
            • 做法3 ✡
    • 《简单树剖练习题》
    • [QOJ9638] 线段树与区间加
            • 做法1
            • 做法2
    • 「GLR-R3」谷雨
    • [集训队互测] 数据结构
    • [CF1930H]Interactive Mex Tree ✯✡

字符串

CF1827C

对于偶回文串,若它有一个偶的回文后缀,那么这个偶回文串一定能拆成若干个偶回文串

那么对于一个好的串的划分,采取能划分就划分的方式,则是唯一的

所以对于每个后缀找到最小的回文后缀即可

\(PAM\)即可\(O(N)\)解决问题

CF1913F

考虑改变\(s_i\)的字符,消失的回文串是不以\(i\)为中心,且包含了\(i\)的回文串,这个好算的

考虑改变后的,增加的也是不以\(i\)为中心且包含\(i\)的回文串

可以最开始先处理一下,枚举回文中心\(p\),可以很轻松的找到以\(p\)为o中心的最长回文串的长度,此时不能再长,要么是碰到边界了,要么当前两端的点的字符不相同,此时只需要改变其中一个变成另一个即可,我们假设它们已经相同,然后再继续延伸向两侧

复杂度\(O(NlogN)\)

P10716

对于\(k\)的限制,就是限制了\(|A|\)的最大长度,再加上\(A\)必须是\(border\),后面可以\(kmp\)+\(st\)表跳

前面这个是\(check\)是否串\(A\)\(S\)中贪心的匹配后,第\(k\)个匹配到的串全都包含在\(i\)内,因为一共匹配到的位置只有\(\sum\frac ni=O(NlogN)\),所以可以暴力的找到所有匹配的位置

具体的过程类似链表维护,维护当前点的后一个点,显然可以并查集辅助

复杂度\(O(NlogN\alpha(N))\)

P11150 ✩✯

要求\(S[1,i]+T+S[i+1,n]\)最小,暴力的想法就是枚举所有的\(i\)然后挨个判断大小,但这样复杂度高达\(O(TN)\),似了

考虑去掉无用的\(i\),对于点对\((i,j)\),若满足\(i+j\)最小且\(S[1,i]+T[1,j]<S[1,i+j]\),则显然这里的\(i\)可能成为答案的\(i\),否则当且仅当,前面得到的可能成为答案的\(i\)满足\(S[i-m+1,i]=T[1,j]\),即可置换一下\(S[i-m+1,i]\)\(T[1,j]\)的位置

因此可以在\(S\)后面塞个\(INF\)

可以\(SAM\)然后枚举\(j\)找最小的\(i\)即可,此时候选的\(i\)的数量级就是\(O(M)\)的了,可接受直接比较了

对于\((i_1,j_1)\)\((i_2,j_2)\)\(i_1<i_2\)),有\(S[1,i_1]+T[1,j_1-1]=S[1,i_2]+T[1,j_2-1]\),只需要考虑\(T[j_1,m]+S[i_1+1,n]\)\(T[j_2,m]+S[i_2+1,n]\)的大小即可,且可以发现,如果\(T[j_1,m]\)\(T[j_2,m]\)的前缀,那么其实\(T[j_1,m]+S[i_1+1,n]\)就和\(T[j_2,m]+S[i_2+1,n]\)相同了

求出可能是答案的\(i\)后,再往前跳\(T\)的循环即可

\(N\)\(Q\)同阶,复杂度\(O(Nlog N)\)

[NOI2021] 轻重边

做法1 ✩

比较巧妙的做法,给每个点赋值,然后一条边是重边当且仅当其相连的两点的权值相同

做法2

称题目的重边为标记边

先轻重链剖分,我们维护重链上的信息,轻链的把信息挂到父亲上,即记录一个点的孩子的轻边中,哪些是被标记的边,显然至多俩

那么跳\(a\rightarrow b\)时,因为与路径上的点相连且不在路进上的边中,只有\(O(logN)\)条重链,所以直接去修改这些重链

做法3 ✡

用毛毛虫,然后\(0/1\)表示\(x\rightarrow fa_x\)是否是重边

复杂度都是\(O(Nlog^2N)\)

《简单树剖练习题》

路径上的点的权值的变化就是\(2k|a_u-a_v|^m\),对于与路径相邻的那些重边,\(O(logN)\)条,直接暴力的改,轻边查询的时候暴力的查即可

复杂度\(O(Nlog^2N)\)

[QOJ9638] 线段树与区间加

做法1

其实\(va\)没用,因为\(a_i\)等价于\(\sum_{j\in tree_i} tag_j\times len_j\),那么给\(vb_i\)加上 所有祖先的\(va\)之和乘\(len_i\) 即可

发现操作就形如两条链,一个整体向左,一个整体向右,然后这两条链上的点除了最后一个,都要下传标记,且与链上的点(除了底部那个)相邻的点和链的底部的点都要打上\(k\)\(tag\)

树剖一下

这个打标记,对于重链头,就可以标记给它的父亲,后面遍历到它的时候再传下来即可,注意帮左/右儿子打的标记要分别记录

考虑怎么维护下传标记,实际上可以直接找到所有标记点然后传下去即可,因为你注意到每次实际上真正打到点上的标记是\(O(1)\)

复杂度\(O(Nlog^2N)\)

做法2

同样还是只保留\(vb\)

考虑每次\(pushdown(x)\)后答案的变化为\(lazy_x\times(-vb_x+vb_{ls_x}+vb_{rs_x})\),把\(vb'_x\)赋值为\(-vb_x+vb_{ls_x}+vb_{rs_x}\),记\(lazy'\)\(x\)到根的\(lazy\)之和,那么\(\Delta=\sum_{i\in S}lazy'_i\times vb'_i\)\(S\)表示要下传标记的集合

那么给一个点的\(lazy_x\)加上\(k\)的贡献就是\(k\times vb_x\),在每次操作中,只要找到所有打标记的点的\(vb_x\)之和即可,这个是好记录的,就像做法1一样,记录点\(u\)到其所属链底的所有点的非链上的左/右儿子的\(vb_x\)之和即可

对于每次操作,就是把完全被包含于\([l,r]\)的区间的\(lazy'\)都加上\(k\),与\([l,r]\)有交的区间的\(lazy'\)都清空且加入\(S\),后面这个是两个链,树剖很好维护

对于前面这个,注意到这样的点就是后面那俩链上的点的,不在链上的右/左儿子子树,考虑这样标号,对于一条重链,先把它链上的点都遍历了,再依次遍历其所有的左子树,再一次遍历其所有的右子树,这样就可以表示为一个区间了

复杂度\(O(Nlog^2N)\)

「GLR-R3」谷雨

用毛毛虫,但是端点处的点要特殊处理一下

复杂度\(O(Nlog^2N)\)

[集训队互测] 数据结构

毛毛虫升级版,也许可以叫猫猫虫

先标号一条重链,再依次标号距离该链长度为\(1\)\(2\)\(3\)的点即可

复杂度\(O(Nlog^2N)\)

[CF1930H]Interactive Mex Tree ✯✡

\(p_1\)是入栈顺序,\(p_2\)是出栈顺序,而\(mex(S)=min(U-S)\),则只需要得到所有不在路径\(x-y\)上的点的值的\(\min\)即可,设\(lca(x,y)=z\)\(x'\)\(y'\)分别表示\(x\)\(y\)处于\(z\)的哪个子树中,则\(U-S\)可以表示为:

  • \(p_{1,1\sim in[z]-1}\)
  • \(p_{1,in[y]+1\sim n}\)
  • \(p_{2,1\sim out[x]-1}\)
  • \(p_{1,in[x]+1\sim in[y']-1}\)
  • \(p_{2,out[x']+1\sim out[y]-1}\)

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

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

相关文章

第六节 特征提取和无监督学习

没有标签y依旧提取出特征你的模型朝着哪个方向压缩特征,由你的标签来定自监督学习:从x中提取一部分作为自己的标签y,然后用x预测y 在自监督学习中,需要根据数据的特点设计一些自监督任务,这些任务通常基于数据的一些内在属性或关系来构建。例如,在图像数据中,可以设计图像…

产线MES 和 车间MES的区别与联系

制造执行系统(MES)在现代制造业中扮演着至关重要的角色,它连接着企业的计划层与生产现场,推动生产效率提升和质量管控强化。本文将深入探讨产线级MES和车间级MES的区别与联系,帮助读者更好地理解这两种MES系统如何协同工作,共同提升企业的生产管理水平。制造执行系统(ME…

CF995

A link如果选择这一天做题可以让差增加(即我这一天的题数大于他下一天的题数),则选;否则不选。 特殊的,另一个人地\(n+1\)天我们钦定他做了\(0\)道题。点击查看代码 #include<bits/stdc++.h>using namespace std;int n; int a[105],b[105];void qwq(){cin >> …

【qt】1个导航栏实现

//设定可增加按钮最大数量 void setBtnCountMax(int maxCount); const int btnCountMax() const;//设定背景颜色 void setBackGround(QColor bgcolor=QColor("black")); //设定按钮最小宽度 void setButtonMinWidth(int w); //设定内边距 void setPaddings(int left,…

09. Shell脚本

一、什么是ShellShell 是操作系统中的一个 命令行解释器,主要功能是接收用户命令,然后将这些命令传递给操作系统内核去执行。 Shell 是用户与操作系统内核之间的接口,它允许用户通过命令行或脚本来与操作系统进行交互。同时,Shell 也是一种脚本语言,允许用户编写一系列命令…

Maven安装、配置以及Idea使用本地Maven仓库

Maven的安装和配置 Maven是Java项目常用的依赖管理和构建工具,项目使用Maven的一个特点就是包含一个pom.xml文件。实际上,Idea在安装时会集成一个Maven,这里不使用这个集成的,而是记录一下如何在机器上单独安装并配置好。 首先,需要安装好jdk。然后,到搜索引擎上搜索Mave…

DeepSeek逆天,核心是 知识蒸馏(Knowledge Distillation, KD),一项 AI 领域的关键技术

本文原文链接 文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :《尼恩Java面试宝典》 持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备 免费赠送 :《尼恩技术圣经+高并发系列PDF》 ,帮你 …

Java初学者笔记-12、前端开发基础

未完待续 Web 三个组成部分:HTML:负责网页的结构(页面元素和内容)。 CSS:负责网页的表现(页面元素的外观、位置等页面样式,如:颜色、大小等)。 Javascript:负责网页的行为(交互效果)。高级技术:基于JS封装而来的高级框架——vue。 基于vue的桌面端组件库——Eleme…

Java笔记-13、Web后端基础 Maven

Maven是一款用于管理和构建Java项目的工具,是apache旗下的一个开源项目。基于项目对象模型(POM),通过一小段描述信息管理项目构建。依赖管理:方便快捷地管理项目依赖的资源(jar包)。 项目构建:标准化的跨平台自动化项目构建方式。Maven面板中Lifecycle中的compile用于编译…

直流有刷电机.

一、基础知识回顾 1.1 电路定律 1.1.1 基尔霍夫电流定律 在集总参数电路中的任一节点处,所有支路电流的代数和在任何时刻恒等于零,即\(\sum i=0\)。 对于正弦稳态交流电路,其相量形式为\(\sum {\dot I}=0\)。 其中,当支路电路的参考方向为流入、流出节点时,支路电流分别取…

用C# GDI编写粒子效果

C#语言能不能画一动画呢?闲来无事,特过一把编程瘾。一共写了6个例子特效动画,界面如下,程序在文末供下载。拿一个粒子效果“鼓泡泡效果”的类讲解,其他类似:using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; usi…

你说得对,但是我怎么没学过后缀科技啊???

后缀数组 (SA) 后缀数组(SA,Suffix Array)最基础的应用是,可以将给定串 \(S\) 的所有后缀串排序。 一点定义:\(sa_i\) 表示第 \(i\) 小的后缀的编号,\(rk_i\) 表示后缀 \([i,n]\) 的排名。显然 \(sa_{rk[i]}=rk_{sa[i]}=i\)。 后缀数组就是 \(sa\) 数组,我们可以利用后缀…