CF1821
CF1821
A. Matching
Statement
你将获得一个最多包含 \(5\) 个字符的整数模板。计算与其匹配的正整数(严格大于 \(0\))的数量。
Solution
考虑如果只能为 \(0\),那么方案数只能为 \(0\)。
否则当 ? 为第一位时,答案 \(\times 9\),否则答案 \(\times 10\)。
B. Sort the Subarray
Statement
有一个序列 \(a\),帅气迷人的 louis 排序了其中一段子序列 \([l,r]\),得到了另一个新的序列。给出这两个序列,求 帅气迷人的 louis 排序的那一段子序列的左右端点 \(l,r\)。输出最长的可能的子序列。
Solution
首先找到第一个不同和最后一个不同的 \(l,r\)。然后根据题目中的顺序要求左右延伸即可。
C. Tear It Apart
Statement
现有一个由小写字母组成的字符串,你将对这个字符串进行操作。每次操作你可以选择任意多个(可以只选一个)两两在字符串中不相邻的字母,把它们从字符串中删除。求至少进行多少次操作,字符串里的所有字母相同。
Solution
考虑枚举所有字母然后分段。
次数就是 \(\min\limits_{c=a}^z (\max(\log(len)+1))\)。
D. Black Cells
Statement
在一条数轴上有无穷个点,下标为 \(0, 1, 2, \ldots\),初始时每个点都是白色的。
你控制着一个机器人,初始时机器人位于坐标为 \(0\) 的那个点。
机器人有两种状态:激活状态 和 非激活状态。
当处于激活状态时,机器人所在的点都会被染成黑色。
处于非激活状态时,机器人所在的点不会被染成黑色。
初始时机器人处于非激活状态。
你可以对这个机器人进行若干次操作,操作分为三种类型。每一次操作,你可以选择如下三种操作之一执行:
- 将机器人的位置像数轴的正方向移动一个单位(即:若当前机器人在坐标 \(x\),则执行一次该操作后机器人将移动到坐标 \(x+1\) 的那个点);
 - 激活机器人:该操作只有当机器人处于非激活状态时才能执行,执行该操作后机器人将变为 激活状态;
 - 撤销激活机器人:该操作只有当机器人处于激活状态时才能执行,执行该操作后机器人将变为 非激活状态。
 
有 \(n\) 个区间,第 \(i\) 个区间用 \([l_i, r_i]\) 表示。
你需要使用最少的操作次数,将至少 \(k\) 个点染成黑色,但是有一个限制,就是:这些染成黑色的点必须包含在至少一个给定的区间中,这也就是说,如果你要将坐标为 \(x\) 的那个点染成黑色,则必须保证存在一个 \(i(1 \le i \le n)\) 满足 \(l_i \le x \le r_i\)。
同时,本题也要求操作结束时机器人恢复到非激活状态(这也就意味着最少操作次数对应的最后一次操作是 撤销激活机器人)。
问:至少需要进行几次操作能够使至少 \(k\) 个点被染成黑色,且最终机器人处于非激活状态?
Solution
首先选取长度大于等于 2 的区间肯定不劣。考虑最后答案的组成会是什么样子的,要么全部选取一些长度大于等于 2 的区间,最后没选完就够了。要么选取一些长度大于等于 2 的区间再拼一些长度为 1 的区间。
显然如果是第一种的话答案唯一。第二种可能之后加上一些长度大于等于 2 的区间拼成答案。
E. Rearrange Brackets
Statement
- 本题一个测试点内有多组测试数据。
 - 对于一个匹配的括号串,定义它的权值为进行以下操作多次将它清空的最小总代价:
- 选取两个相邻的左右括号删除,并将代价加上原右括号右边的括号数量。
 
 - 你可以进行 不超过 \(k\) 次 以下操作,将给定的匹配括号串 \(S\) 变为另一个匹配括号串:
- 选取 一个 括号,将它移动到串的任意位置。
 
 - 求最终括号串的权值最小值。
 - \(1\leq |S|,\sum |S|\leq2\times10^5\),\(0\leq k\leq5\)。
 
Solution
先考虑没有 \(k\) 的限制的情况。
显然尽可能从右往左删掉匹配括号是比较合理的。
然后我们考虑设 \(dep_i\) 表示右括号处在 \(i\) 的括号对的贡献。
再考虑对于有 \(k\) 的情况下,对于每次移动,答案会减少多少。
显然会减少中间括号对数个。我们维护他俩之间的距离然后排序选出前 \(k\) 大。答案减掉这些就行了。
直接排序复杂度 \(O(n\log n)\),你也可以使用其他的方法优化到 \(O(n)\),不过看起来没什么必要。

                
            
        
浙公网安备 33010602011771号