100%
本题要求将字符串中的数字重复 次,字母重复 次。
直接遍历字符串 ,判断当前字符的类型:
如果是数字字符('0' '9'),循环输出 次;
如果是字母字符('a' 'z' 或 'A' 'Z'),循环输出 次。
时间复杂度 。
100%
首先考虑数值重复的问题:
1 在各进制下数值均为 )。根据题目要求“数值相等只能算作一种”,因此当 时,答案固定为 。所以我们就把问题变成了:统计字符串 能符合多少种进制的定义。
我们可以通过找到字符串 中最大的字符 来快速判断:
0-9 和 A-F,且至少在一种进制下合法。因此 在十六进制下一定合法。0-7。即 。0-1。即 。统计答案即可。
时间复杂度 。
100%
本题要求最小化将 变为 的总代价。由于每一位的变换互不影响,我们可以单独计算每一对字符 的最小转换代价,最后累加。
由于数字字符与对应的小写字母(0 a, ..., 9 j)之间转换代价为 。因此我们可以忽略它们之间的区别。为了方便计算,我们可以优先将所有的数字字符都转化为对应的小写字母。
a j。经过这一步,问题就转化为了:在 a z 的字符集上,给定两个字符 和 ,求最短距离。
接下来我们考虑字符之间的连接边(代价为 的操作)。
如果没有数字,只有字母,那么除了相邻字母的连边外,只有一条特殊的“字母循环边”:z a。
但是,因为引入了数字,我们还需要考虑数字原本的循环性质:
9 和 0 是相邻的(代价 )。j 和 a 之间也多出了一条“数字循环边”(代价 )。3. 计算最短路径 综上所述,归一化后的字符 到 有以下几种路径选择,取最小值即可:
直接移动:不经过任何循环边界。代价为:。
利用“数字循环边” (a j):
利用“字母循环边” (a z):
路径:$x \to \dots \to \text{'a'} \to \text{'z'} \to \dots \to y$。
代价:(反向同理)。
同时利用两条边:
j a z 的路径。时间复杂度 。
100%
题目要求我们需要构造一棵 个节点、直径为 的树,并使得其度数序列 的字典序最小。
所谓“度数序列字典序最小”,意味着我们需要让序列前面的元素尽可能小。 由于我们可以任意安排节点的编号( 到 ),因此只要我们确定了这棵树由哪些度数构成,为了让序列字典序最小,我们最优的策略一定是将这些度数从小到大排序,然后依次分配给节点 。 问题就转换成构造一个合法的度数集合,使得其中包含尽可能多的 ,其次是尽可能多的 ,以此类推。
为了满足直径为 的限制,树中必须包含一条长度为 (包含 个节点)的链,我们称之为“骨架”。
接着我们考虑将剩下的节点全部接到不是直径两端的某个点上,这样其他的点的度数就是 。不难证明此时是最优的。
时间复杂度 。
100%
让所有兔子在坐标 集合所需的时间 ,取决于初始(或使用魔法后)所有兔子中,位置最左的兔子 和位置最右的兔子 之间的距离。如果最左和最右的坐标确定,则所有人集合到中间的最短时间为 。
题目保证坐标和 均为偶数,因此计算时直接用 即可。
根据上述观察可以发现,我们只需要让左边的往右走,右边的往左走,因此不用魔法的兔子一定构成一个区间。
我们可以枚举不用魔法的兔子的区间 (区间长度固定为 ),然后计算出最左边的兔子坐标( ) 和最右边的兔子坐标 ()即可。
注意特判 。
时间复杂度 。
100%
题目要求计算消除节点 的电荷(即令 )后,树的“健康程度” 。 首先我们需要预处理出初始状态下每个节点的子树和 。 当我们将 变为 时,会对树产生什么影响?
记 为从根节点到 的路径上的节点集合(即 及其所有祖先)。 消除 后的总健康程度可以表示为:
$$Ans_u = \sum |S_i| - \sum_{v \in Path(u)} |S_v| + \sum_{v \in Path(u)} |S_v - a_u|$$当我们从根节点递归走到节点 时,当前的递归栈正好对应了 。因此,我们可以动态维护当前路径上的 集合。
我们需要计算的是 。可以将绝对值拆解:
为了快速计算,我们可以使用两个树状数组 分别维护 的个数和数值 的和
由于 和 的值域很大且可能有负数,需要进行离散化处理。
时间复杂度为 。
100%
FHQ Treap 模板题。
为了处理操作 1 中一次性插入 个 的情况,我们将这 个相同的元素看作一个节点。每个 Treap 节点维护以下信息:
由于每次操作 至多插入 个节点,故时间复杂度为 。