Rating 1300
2146C 错误的二分查找
来源:Codeforces Round 1052 (Div. 2)-C. Wrong Binary Search
Tags: 二分查找 构造算法
| 时间限制 | 内存限制 |
|---|---|
| 2 秒 | 256 megabytes |
给定一个整数 和一个长度为 的二进制字符串 。
对于一个长度为 的排列 和一个整数 ,我们按照以下伪代码定义 :
我们称整数 () 是稳定的,当且仅当无论在上述伪代码执行过程中如何选择 的值, 总是不会返回 undefined,并且 总是成立。
你需要构造一个长度为 的排列 ,使得:
- 对于每个 ,整数 是稳定的当且仅当 。
或者确定这样的排列不存在。
二进制字符串是指每个字符都是 或 的字符串。
长度为 的排列是一个由 到 的 个不同整数按任意顺序组成的数组。例如, 是一个排列,但 不是排列( 在数组中出现两次), 也不是排列( 但数组中出现了 )。
输入
每个测试包含多个测试用例。第一行包含测试用例的数量 ()。接下来是测试用例的描述。
每个测试用例的第一行包含一个整数 () —— 排列的长度。
第二行包含一个长度为 的二进制字符串 ( 或 )。
保证所有测试用例的 的总和不超过 。
输出
对于每个测试用例:
- 如果这样的排列不存在,在输出的唯一一行打印 "NO"。
- 否则,在输出的第一行打印 "YES"。然后在第二行输出 个不同的整数 () —— 你构造的排列。
你可以以任意大小写形式输出标记。例如,字符串 "yEs"、"yes"、"Yes" 和 "YES" 将被识别为肯定响应。
如果有多个答案,你可以输出其中任意一个。
测试用例
输入
输出
注意
在第一个测试用例中,我们构造了 。以 为例:
- 初始时, 且 ;
- 我们将在 到 之间随机选择一个整数作为 。
- 如果我们选择 :
- ,所以 被设置为 。现在 且 ;
- 我们将在 到 之间随机选择一个整数作为 。
- 如果我们选择 :,所以返回值为 。
- 如果我们选择 :,所以 被设置为 。现在 且 ,所以我们只能选择 。,所以返回值为 。
- 如果我们选择 :
- ,所以返回值为 。
- 如果我们选择 ,过程与选择 时类似。返回值总是 。
- 如果我们选择 :
- 因此,无论在执行过程中如何选择 , 的返回值总是 。
所以 总是成立,整数 是稳定的。
类似地,我们可以证明整数 和 也是稳定的。因此,排列 是一个有效的答案。
在第二个测试用例中,我们构造了 。以 为例:
- 初始时, 且 ;
- 我们将在 到 之间随机选择一个整数作为 。假设我们选择 ;
- ,所以 被设置为 。现在 且 ;
- 我们将在 到 之间随机选择一个整数作为 。我们只能选择 ;
- ,所以 被设置为 。现在 且 ;
- 由于 ,循环退出,返回值为 undefined。
因此, 的返回值是 undefined,所以整数 不是稳定的。
类似地,我们可以证明整数 、、 和 也不是稳定的。因此, 是一个有效的答案。
其他一些排列,例如 和 ,也是有效的答案。你可以输出其中任意一个。
在第三个测试用例中,可以证明这样的排列不存在。
2143C 最大树
来源:Codeforces Round 1051 (Div. 2)-C. Max Tree
Tags: 构造算法 深度优先搜索及其类似算法 图 贪心
| 时间限制 | 内存限制 |
|---|---|
| 2 秒 | 256 megabytes |
给定一棵由 个顶点组成的树,顶点编号从 到 。 条边中的每条边都关联着两个非负整数 和 。
考虑一个 到 的整数的排列 ,其中 表示分配给顶点 的值。
对于一条边 (满足 )及其关联的值 和 ,其贡献定义如下:
该排列的价值是所有边的贡献之和。
你的任务是找到最大化这个总价值的任意一个排列 。
长度为 的排列是一个由 到 的 个不同整数按任意顺序组成的数组。例如, 是一个排列,但 不是排列( 在数组中出现两次), 也不是排列( 但数组中出现了 )。
输入
每个测试包含多个测试用例。第一行包含测试用例的数量 ()。接下来是测试用例的描述。
第一行包含一个整数 () —— 树中顶点的数量。
接下来的 行,每行包含四个整数 , , , (, ) —— 描述顶点 和 之间的一条边及其关联的值 和 。保证给定的边构成一棵树。
保证所有测试用例的 的总和不超过 。
输出
对于每个测试用例,你必须输出一个 到 的整数的排列 ,该排列能最大化问题定义中的总价值。如果有多个答案,你可以输出其中任意一个。
测试用例
输入
输出
注意
在第一个测试用例中:
考虑排列 。其价值为 。原因如下:
- 由于 ,第一条边的贡献为 。
- 由于 ,第二条边的贡献为 。
其他一些排列的价值如下:
- 的价值为 。
- 的价值为 。
- 的价值为 。
在第二个测试用例中:
的价值为 。另一个可能的正确答案是 。
2129A 双重视角
来源:Codeforces Round 1040 (Div. 1)-A. Double Perspective
Tags: 构造算法 动态规划 并查集 图 贪心 排序
| 时间限制 | 内存限制 |
|---|---|
| 2 秒 | 256 megabytes |
对于一个由数对构成的集合 ,其中对所有 有 ,我们定义 和 如下:
将每个 视为数轴上的一个线段, 是它们的并集的长度。形式化地说, 是满足存在某个 () 使得 的整数 的数量。
将每个 视为一个无向图中的一条边, 是位于至少一个包含至少 条边的简单环上的节点数量。形式化地说, 是满足在图中存在一条路径 的节点 的数量,其中 且所有 互不相同。
例如,对于 ,我们可以得到 和 。
给定 个互不相同的数对。你的任务是选择这些数对的一个子集 ,使得 最大化。你需要输出所选数对的索引。
输入
每个测试包含多个测试用例。第一行包含测试用例的数量 ()。接下来是测试用例的描述。
每个测试用例的第一行包含一个整数 ()。
接下来的 行,每行包含两个整数 和 (),表示一个数对。
保证在同一测试用例中所有数对是互不相同的。
保证所有测试用例的 的总和不超过 。
输出
对于每个测试用例,第一行包含一个整数 () —— 子集 的大小。
第二行包含 个整数 () —— 所选数对的索引。注意索引必须是互不相同的。
测试用例
输入
输出
注意
在第一个测试用例中,如果不选择任何数对(即 ),则 。如果选择第一个数对,则 。因此最优解是选择第一个数对。
2127B 哈米德?
来源:Atto Round 1 (Codeforces Round 1041, Div. 1 + Div. 2)-B. Hamiiid, Haaamid... Hamid?
Tags: 游戏 贪心
| 时间限制 | 内存限制 |
|---|---|
| 1 秒 | 256 megabytes |
Mani 把 Hamid 关在一个 的网格中。最初,网格中的一些单元格是墙,其余的是空的,Hamid 位于一个空单元格中。
每一天,按顺序发生以下事件:
- Mani 选择一个空单元格并在该单元格建造一堵墙。注意,他不能在 Hamid 当前所在的单元格建造墙;
- Hamid 选择一个方向(左或右),然后:
- 如果该方向没有墙,他将逃离网格;
- 否则,他将移动到该方向上最近的那堵墙并摧毁它。在这一天结束后,Hamid 位于被摧毁的墙的位置。
以下是 时一个可能的行动序列示例:
Hamid 总是知道墙的位置。他希望最小化逃离网格所需的天数,而 Mani 希望最大化它。
你需要确定在双方都采取最优策略的情况下,Hamid 逃离网格所需的天数。
输入
每个测试包含多个测试用例。第一行包含测试用例的数量 ()。接下来是测试用例的描述。
每个测试用例的第一行包含两个整数 和 (, ) —— 分别是网格的大小和 Hamid 的初始位置。他最初位于从左到右第 个单元格。
第二行包含一个长度为 的字符串 ( "#" 或 ) —— 网格的初始状态。如果 "#" ,则网格的第 个单元格有一堵墙;如果 ,则该单元格为空。
保证第 个单元格是空的,并且网格中至少有两个空单元格。
保证所有测试用例的 的总和不超过 。
输出
对于每个测试用例,输出一个整数 —— 在双方都采取最优策略的情况下,Hamid 逃离网格所需的天数。
测试用例
输入
输出
注意
在第一个测试用例中,Mani 必须在单元格 建造一堵墙,因此 Hamid 可以在第一天从网格的左侧逃离。
在第二个测试用例中,如果 Mani 将墙建在 Hamid 的左边,Hamid 可以从右边逃离。如果墙建在 Hamid 的右边,他可以从左边逃离。因此,答案是 。
在第三个测试用例中:

可以证明在上面的图示中双方都采取了最优策略。
在第四个测试用例中,我们在题目描述中展示了一个行动示例。注意,在这个示例中玩家没有采取最优策略。
2124C 子集乘法
Tags: 构造算法 贪心 数学 数论
| 时间限制 | 内存限制 |
|---|---|
| 3 秒 | 256 megabytes |
Alice 有一个由 个正整数组成的数组 。该数组满足一个优美的性质:对于每个 , 能整除 。
Bob 看到 Alice 的优美数组后心生嫉妒。为了破坏它,Bob 首先创建一个大小为 的数组 ,使得对每个 有 。然后,他选择一个正整数 ,并将 中的一些(可能没有,也可能是全部)元素乘以 。
形式化地说,他选择一个(可能为空的)子集 ,并对每个 ,令 。
你被给定数组 ,但你不知道数组 和所选的数 。请输出 Bob 可能选择的任意一个整数 ,使得将正确的数组 的某个子集的元素乘以 后能得到数组 。保证答案存在。如果有多个可能的整数,你可以输出其中任意一个。
输入
每个测试包含多个测试用例。第一行包含测试用例的数量 ()。接下来是测试用例的描述。
每个测试用例的第一行包含一个整数 () —— 数组 的长度。
每个测试用例的第二行包含 个整数 () —— 表示数组 。
保证数组 可以按照题目描述的方式从某个优美数组 和某个正整数 得到。
保证所有测试用例的 的总和不超过 。
输出
对于每个测试用例,在新的一行输出任意一个可能的 值 ()。保证至少存在一个 值。
测试用例
输入
输出
注意
在第一个测试用例中,Bob 可能选择了 和 (意味着他根本没有改变数组 )。
在第三个测试用例中,Bob 可能选择了 和 ,意味着他将 和 都乘以了 。原始数组是 ,它满足所需的性质。
Rating 1400
2127C 旅行购物
来源:Atto Round 1 (Codeforces Round 1041, Div. 1 + Div. 2)-C. Trip Shopping
Tags: 游戏 贪心 排序
| 时间限制 | 内存限制 |
|---|---|
| 2 秒 | 256 megabytes |
Ali 和 Bahamin 决定在伊朗美丽的南部海岸度过暑假。他们还同意在旅行期间进行购物——但他们没有设定固定预算,而是决定通过玩一个游戏来确定花费金额。
游戏在两个数组 和 上进行,每个数组包含 个整数。
游戏将进行 轮。在一轮中:
- 首先,Ali 选择两个索引 和 ();
- 然后,Bahamin 任意地重新排列四个整数 , , , 。注意 Bahamin 可以在两个数组之间交换数字。他也可以保持两个数组不变。
在所有 轮结束后,游戏的价值定义为 。Ali 和 Bahamin 将在旅行中恰好花费 枚硬币。
然而,他们的目标截然不同:
- Ali 希望尽可能少花费,即最小化 ;
- Bahamin 希望尽可能多花费,即最大化 。
你需要找出在 Ali 和 Bahamin 都采取最优策略的情况下,他们最终将花费的硬币数量。
输入
每个测试包含多个测试用例。第一行包含测试用例的数量 ()。接下来是测试用例的描述。
每个测试用例的第一行包含两个整数 和 (, ) —— 分别是数组 和 的长度,以及游戏的轮数。
第二行包含 个整数 () —— 数组 的元素。
第三行包含 个整数 () —— 数组 的元素。
保证所有测试用例的 的总和不超过 。
输出
对于每个测试用例,输出一个整数 —— 在 Ali 和 Bahamin 都采取最优策略的情况下,他们最终将花费的硬币数量。
测试用例
输入
输出
注意
在第一个测试用例中,Ali 只能选择 ,而 Bahamin 可以重新排列所有四个数字。因此,他可以分配 和 。游戏的价值将为 。可以证明这是 Bahamin 能达到的最大可能值——其他排列如 也是可能的,但它们没有更大的值。
在第二个测试用例中,Bahamin 的最佳策略是无论 Ali 选择什么索引,都保持两个数组不变。游戏的价值将为 。
2123E MEX 计数
来源:Codeforces Round 1034 (Div. 3)-E. MEX Count
Tags: 二分查找 数据结构 贪心 排序 双指针
| 时间限制 | 内存限制 |
|---|---|
| 3 秒 | 256 megabytes |
定义一个数组的 (最小排除值)为该数组中未出现的最小非负整数。例如:
- ,因为 不在数组中。
- ,因为 和 在数组中,但 不在。
- ,因为 、、、 都在数组中,但 不在。
给定一个大小为 的非负整数数组 。
对于所有 (),统计从 中恰好移除 个值后, 的可能取值数量。
输入
第一行包含一个整数 () —— 测试用例的数量。
每个测试用例的第一行包含一个整数 () —— 数组 的大小。
每个测试用例的第二行包含 个整数 ()。
保证所有测试用例的 的总和不超过 。
输出
对于每个测试用例,输出一行包含 个整数 —— 对于 ,在恰好移除 个值后 的可能取值数量。
测试用例
输入
输出
注意
在第一个样例中,考虑 。如果移除一个 ,则得到以下数组:
| 1 | 0 | 1 | 2 |
|---|
因此得到 。或者,如果移除 ,则得到以下数组:
| 1 | 0 | 0 | 1 |
|---|
因此得到 。可以证明,在恰好移除一个值后,这些是 唯一可能的值。因此 的输出是 。
2120C 神圣之树
来源:Codeforces Round 1033 (Div. 2) and CodeNite 2025-C. Divine Tree
Tags: 构造算法 贪心 数学 排序 树
| 时间限制 | 内存限制 |
|---|---|
| 2 秒 | 256 megabytes |
Harshith 在一棵神圣之树下训练,在竞技编程中获得了启迪。神圣之树是一棵有根树 ,包含 个节点,编号从 到 。节点 的神圣性,记为 ,定义为从根节点到节点 的唯一简单路径上的最小节点编号。
Aryan 作为一名渴望知识的竞技程序员,请求 Harshith 传授知识。Harshith 同意了,但条件是给 Aryan 两个正整数 和 ,他必须构造一棵包含 个节点的神圣之树,使得树的总神圣性为 ,即 。如果不存在这样的树,Aryan 必须报告这是不可能的。
为了获得知识,Aryan 向你求助来完成这个任务。作为他的好朋友,请帮助他解决这个任务。
树是一种无环连通图。有根树是指其中一个顶点特殊,称为根的树。
输入
每个测试包含多个测试用例。第一行包含测试用例的数量 ()。接下来是测试用例的描述。
每个测试用例的第一行包含两个整数 和 (, )。
保证所有测试用例的 的总和不超过 。
输出
对于每个测试用例,在一行中输出一个整数 —— 树的根节点。
然后输出 行,每行描述树的一条边 —— 一对正整数 (, ),表示第 条边连接顶点 和 。
边和边的顶点可以以任意顺序输出。如果有多个解决方案,输出其中任意一个。
如果没有解决方案,则输出 "-1"。
测试用例
输入
输出
注意
在第一个测试用例中,只有一个节点,其值为 ,因此无法得到总和 。
在第二个测试用例中,使用给定的以 为根的树,可以得到总和 。
2114E 绮礼袭击庄园
来源:Codeforces Round 1027 (Div. 3)-E. Kirei Attacks the Estate
Tags: 深度优先搜索及其类似算法 动态规划 贪心 树
| 时间限制 | 内存限制 |
|---|---|
| 2 秒 | 256 megabytes |
有一次,绮礼悄悄潜入了充满陷阱的爱因兹贝伦家庄园,但被切嗣的使魔发现。评估了自身实力后,绮礼决定撤退。庄园被表示为一棵有 个顶点的树,根节点为顶点 。树的每个顶点记录有一个数字 ,表示顶点 的危险程度。回忆一下,树是一种无环的连通无向图。
为了成功撤退,绮礼必须计算每个顶点的威胁值。一个顶点的威胁值等于从该顶点开始的垂直路径上的最大交错和。从顶点 开始的垂直路径的交错和定义为 ,其中 是顶点 在通往根节点(顶点 )的路径上的父节点。
例如,在下方的树中,顶点 有以下垂直路径:
- ,交错和为 ;
- ,交错和为 ;
- ,交错和为 ;
- ,交错和为 。
顶点的危险程度用红色标出。
帮助绮礼计算所有顶点的威胁值并逃离庄园。
输入
第一行包含一个整数 () —— 测试用例的数量。
接下来描述测试用例。
第一行包含一个整数 () —— 树中顶点的数量。
第二行包含 个整数 () —— 顶点的危险程度。
接下来的 行包含数字 (, ) —— 描述树的边。
保证所有测试用例的 的总和不超过 。同时保证给定的边集构成一棵树。
输出
对于每个测试用例,输出 个整数 —— 每个顶点的威胁值。
测试用例
输入
输出
注意
第一个测试用例中的树在题目描述中已给出,最大变号和的实现如下:
- ;
- ;
- ;
- ;
- 。
2111D 创建课程表
来源:Educational Codeforces Round 179 (Rated for Div. 2)-D. Creating a Schedule
Tags: 构造算法 数据结构 贪心 实现 排序
| 时间限制 | 内存限制 |
|---|---|
| 2.5 秒 | 512 megabytes |
新学期即将开始,需要为第一天制定课程表。学院总共有 个班级和 间教室。已知每个班级在第一天恰好有 节课,且每个班级的第 节课在同一时间进行。每节课必须在教室中进行,并且同一时间同一教室不能有超过一个班级上课。
每间教室都有自己的编号(至少三位数),该编号除最后两位外的所有数字表示教室所在的楼层。例如,教室 位于第 层,而教室 位于第 层。楼层之间可以通过楼梯移动;对于任何楼层 ,可以下到 层或上到 层;从第一层只能上到第二层;从第 层(最后一层)只能下到第 层。
学院教务处决定以这样的方式制定课程表:使得学生在楼层之间的移动尽可能多,即所有班级在楼层之间的移动总次数应最大化。当学生从一层移动到另一层时,他们走最短路径。
例如,如果有 个班级和 间教室 ,课程表可以安排如下:
课程序号 班级 1 班级 2 在这样的安排下,班级每次将在第 层和第 层之间移动,总共产生 次楼层间移动。
请帮助教务处创建任意一个合适的课程表!
输入
每个测试包含多个测试用例。第一行包含一个整数 () —— 测试用例的数量。接下来是测试用例的描述。
每个测试用例的第一行包含两个整数 和 () —— 分别是班级的数量和可用教室的数量。
每个测试用例的第二行包含 个整数 () —— 可用教室的编号。
输入附加约束:
- 所有教室编号互不相同;
- 所有测试用例的 的总和不超过 。
输出
对于每个测试用例,输出 行,其中第 行应包含 个整数 —— 第 个班级上课的教室编号。
在第 节课时,每间教室最多只能被一个班级使用。
测试用例
输入
输出
注意
在第三个测试用例中,教室之间的最大移动次数为 。
Last updated on

顶点的危险程度用红色标出。