CF1821

CF1821

A. Matching

Statement

你将获得一个最多包含 5 个字符的整数模板。计算与其匹配的正整数(严格大于 0)的数量。

Solution

考虑如果只能为 0,那么方案数只能为 0

否则当 ? 为第一位时,答案 ×9,否则答案 ×10

Code

B. Sort the Subarray

Statement

有一个序列 a,帅气迷人的 louis 排序了其中一段子序列 [l,r],得到了另一个新的序列。给出这两个序列,求 帅气迷人的 louis 排序的那一段子序列的左右端点 l,r。输出最长的可能的子序列。

Solution

首先找到第一个不同和最后一个不同的 l,r。然后根据题目中的顺序要求左右延伸即可。

Code

C. Tear It Apart

Statement

现有一个由小写字母组成的字符串,你将对这个字符串进行操作。每次操作你可以选择任意多个(可以只选一个)两两在字符串中不相邻的字母,把它们从字符串中删除。求至少进行多少次操作,字符串里的所有字母相同。

Solution

考虑枚举所有字母然后分段。

次数就是 minc=az(max(log(len)+1))

Code

D. Black Cells

Statement

在一条数轴上有无穷个点,下标为 0,1,2,,初始时每个点都是白色的。

你控制着一个机器人,初始时机器人位于坐标为 0 的那个点。

机器人有两种状态:激活状态 和 非激活状态。

当处于激活状态时,机器人所在的点都会被染成黑色。

处于非激活状态时,机器人所在的点不会被染成黑色。

初始时机器人处于非激活状态。

你可以对这个机器人进行若干次操作,操作分为三种类型。每一次操作,你可以选择如下三种操作之一执行:

  • 将机器人的位置像数轴的正方向移动一个单位(即:若当前机器人在坐标 x,则执行一次该操作后机器人将移动到坐标 x+1 的那个点);
  • 激活机器人:该操作只有当机器人处于非激活状态时才能执行,执行该操作后机器人将变为 激活状态;
  • 撤销激活机器人:该操作只有当机器人处于激活状态时才能执行,执行该操作后机器人将变为 非激活状态。

n 个区间,第 i 个区间用 [li,ri] 表示。

你需要使用最少的操作次数,将至少 k 个点染成黑色,但是有一个限制,就是:这些染成黑色的点必须包含在至少一个给定的区间中,这也就是说,如果你要将坐标为 x 的那个点染成黑色,则必须保证存在一个 i(1in) 满足 lixri

同时,本题也要求操作结束时机器人恢复到非激活状态(这也就意味着最少操作次数对应的最后一次操作是 撤销激活机器人)。

问:至少需要进行几次操作能够使至少 k 个点被染成黑色,且最终机器人处于非激活状态?

Solution

首先选取长度大于等于 2 的区间肯定不劣。考虑最后答案的组成会是什么样子的,要么全部选取一些长度大于等于 2 的区间,最后没选完就够了。要么选取一些长度大于等于 2 的区间再拼一些长度为 1 的区间。

显然如果是第一种的话答案唯一。第二种可能之后加上一些长度大于等于 2 的区间拼成答案。

Code

E. Rearrange Brackets

Statement

  • 本题一个测试点内有多组测试数据
  • 对于一个匹配的括号串,定义它的权值为进行以下操作多次将它清空的最小总代价:
    • 选取两个相邻的左右括号删除,并将代价加上原右括号右边的括号数量。
  • 你可以进行 不超过 k 以下操作,将给定的匹配括号串 S 变为另一个匹配括号串:
    • 选取 一个 括号,将它移动到串的任意位置。
  • 求最终括号串的权值最小值。
  • 1|S|,|S|2×1050k5

Solution

先考虑没有 k 的限制的情况。

显然尽可能从右往左删掉匹配括号是比较合理的。

然后我们考虑设 depi 表示右括号处在 i 的括号对的贡献。

再考虑对于有 k 的情况下,对于每次移动,答案会减少多少。

显然会减少中间括号对数个。我们维护他俩之间的距离然后排序选出前 k 大。答案减掉这些就行了。

直接排序复杂度 O(nlogn),你也可以使用其他的方法优化到 O(n),不过看起来没什么必要。

Code

posted @   Zimo_666  阅读(531)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示