12 2022 档案
摘要:题目链接 A. Koxia and Whiteboards 注意每一步替换操作都是强制的,而不是可选的。所以就用一个multiset维护所有的数,每次选一个最小的替换掉即可。 时间复杂度。 点击查看代码 #include <bits/stdc++.h> #define rep(i
阅读全文
摘要:题目链接 首先注意到我们对这个环的扫描是一轮一轮进行的,每轮都会从左到右对每个没被删除的元素以p的概率删除。如果我们能对每个求出c号点在第轮被删掉,且是第i个被删除的元素,那么就能求出答案了。不幸的是我们不能枚举所有的t。但是不管怎么样
阅读全文
摘要:题目链接 这题的方法口糊一下没有很难,没达到3500的水准。但是写起来才发现是真的恶心(主要是容易写错),没写过这么累的题,可能难度就体现在这里吧。 计数的时候是要分类讨论的,但是核心算法都一样:启发式合并,线段树合并。把对路径分成以下三类,分别统计合法的: 两条路径的LCA不同(路径的L
阅读全文
摘要:题目链接 首先很容易想到的是对反串求SA和LCP,然后询问就是求起点在某个区间内的所有后缀两两LCP的最大值,可以用莫队解决,时间复杂度,应该是过不了的。 考虑对原串求SAM,两个前缀的最长公共后缀(用LCS表示)其实就是它们在parent tree上对应节点的L
阅读全文
摘要:题目链接 计数技巧大杂烩,好题 先来定义一下"间隔",间隔指的是两个相邻的数之间的大小关系,有两种状态,上坡和下坡,分别指的是和。这题要求的就是长度为的间隔序列相同的排列对(a,b)的个数。 先考虑这样一个问题:在间隔序列确定的情况下有多少不
阅读全文
摘要:题目链接 挺有意思的数据结构题,题面看着像个板子,其实还是有不少学问的。 平面上一堆矩形的题目常见套路就是对轴扫描线,轴线段树维护,这题也不例外。我们先对坐标离散化。题目中输入的是坐标系中的顶点的坐标,为了方便维护,我们需要转换成"格子"的坐标。注意,是先离散化再转换,如果先转换再离散化
阅读全文
摘要:题目链接 首先明确概念: 排列。指的就是一个把数组a重排得到的序列,两个排列相等当且仅当它们对应位全都相等 环形排列。指的是把数组a重排得到的序列首尾相接得到的环形数组,两个环形排列相等当且仅当它们通过位移能够变得对应位全部相等 这题其实是要对所有不同的环形排列,求其中连续相同的数构成的连通块个数的
阅读全文
摘要:题目链接 假设现在起点已经确定,我们观察从这个起点开始能走的最长路径长什么样。把这条最长路径中所有的非平地路径拿出来,它们肯定连成一线,因为不允许上坡;而一条路径重复走的情况只可能是在几个连续的平地那里来回走。所以路径的形状是一条主链(链上的边可以是下坡或者平地),上面挂着一些平地组成的环。由于图是
阅读全文
摘要:题目链接 令表示第i种颜色的珍珠的数量,显然我们最多能装的瓶数是。也就是说,为奇数的的数量不能太多,这个数量要在某个范围内才行,且这个范围是很好求的。考虑对每个n求出表示刚好有n个为奇
阅读全文
摘要:题目链接 先观察满足题目中给出的限制的图有什么特点。先看,它指的是所有与在同一个简单环内的节点。发现一个点v在中,当且仅当点双连通。关于点双连通的判断。首先必要性是显然的,不点双连通显然不行。至于充分性,可以把作为根跑出dfs树,根据上面点双连通的判断方法,
阅读全文
摘要:提交链接 其实就是个大模拟。首先对输入的串进行处理,把所有的命令分开,并把连续的停顿合并。为了方便,定义一个时间单位为全音符的,这样所有命令的持续时间都是整数个时间单位。然后就可以dp了,表示处理到第i个命令,当前八度为j,当前默认时长为k的最优解
阅读全文
摘要:既然是YNOI那肯定是要分块的。先考虑树是一条链的情况,可以直接回滚莫队,对n个节点组成的序列分块。在回滚莫队的过程中,当前维护的区间一共会扩展次,每次都是合并了恰好2个连通块。可以用线段树合并对每个连通块维护其中颜色的奇偶性。注意到每次合并,都有其中一个连通块的大小是1,
阅读全文
摘要:A. Add Plus Minus Sign 如果有偶数个1,显然可以通过加减各一半的方式达到和为0;否则可以达到和为1。需要注意如果序列的第一个数是1,则它的前面只能填加号。 时间复杂度。 点击查看代码 #include <bits/stdc++.h> #define rep(i,n)
阅读全文
摘要:已知两个数组,求一个数组,满足。这里我们把这个东西称为下标模意义下的多项式乘法。那么这个东西怎么做呢? **先说结论:**如果MOD M意义下存在K次单位根,那么把平时用NTT做多项式乘法时的
阅读全文