Rating 1200
2137D 用出现次数替换
来源:Codeforces Round 1047 (Div. 3)-D. Replace with Occurrences
Tags: 构建算法
| 时间限制 | 内存限制 |
|---|---|
| 2 秒 | 256 megabytes |
给定一个数组 ,令 表示值 在数组 中出现的次数。例如,当 时,,。
你有一个大小为 的数组 。请判断是否存在一个大小为 的数组 ,使得对于所有 ,都有 。如果存在这样的数组,请构造它。
输入
每个测试包含多个测试用例。第一行包含测试用例的数量 ()。接下来是测试用例的描述。
每个测试用例的第一行包含一个整数 ()。
第二行包含 个整数 ()。
保证所有测试用例的 的总和不超过 。
输出
对于每个测试用例,如果不存在有效的数组 ,则输出 。
否则,在新的一行输出包含 个整数的数组 。元素应满足 。
测试用例
输入
3
4
1 2 3 4
6
1 2 2 3 3 3
6
6 6 6 6 6 6输出
-1
4 5 5 6 6 6
2 2 2 2 2 2注意
在第一个测试用例中,可以证明没有数组满足要求。
在第二个测试用例中,、、 分别出现了 、、 次。因此,输出数组是正确的,因为 分别是 。
2134C 更大的偶数
来源:Codeforces Round 1045 (Div. 2)-C. Even Larger
Tags: 暴力破解 贪心 实现
| 时间限制 | 内存限制 |
|---|---|
| 2 秒 | 256 megabytes |
如果一个数组满足:对于每一个长度至少为 的子数组 ,其中位于原数组偶数索引处的元素之和大于或等于位于奇数索引处的元素之和,则该数组被称为好的。数组索引从 开始。
例如,数组 和 是好的。数组 不是好的,因为在子数组 中,原数组偶数索引处的元素是 (索引 )和 (索引 ),而奇数索引处唯一的元素是 (索引 )。由于 ,条件不满足。
给定一个包含 个非负整数的数组 。在一次操作中,你可以将数组中的任意元素减少 ,但所有元素必须保持非负。你的任务是找到使数组 成为好数组所需的最少操作次数。可以证明,通过有限次操作可以使数组变成好的。
如果数组 可以通过从数组 的开头删除若干个(可能为零或全部)元素以及从末尾删除若干个(可能为零或全部)元素得到,则称 是 的一个子数组。
输入
每个测试包含多个测试用例。第一行包含测试用例的数量 ()。接下来是测试用例的描述。
每个测试用例的第一行包含一个整数 () —— 数组 的长度。
每个测试用例的第二行包含 个非负整数 () —— 数组 的元素。
保证所有测试用例的 的总和不超过 。
输出
对于每个测试用例,在新的一行输出一个整数 —— 使数组 成为好数组所需的最少操作次数。
测试用例
输入
8
4
3 8 4 4
4
0 2 3 5
2
3 1
5
2 3 1 4 2
4
0 2 4 1
5
3 1 4 5 1
11
3 0 5 4 4 5 3 0 3 4 1
12
410748345 10753674 975233308 193331255 893457280 279719251 704970985 412553354 801228787 44181004 1000000000 3829103输出
0
1
2
0
3
6
14
4450984776注意
在第一个测试用例中,数组 已经是好的,所以答案是 。以下是每个子数组的检查:
| 子数组 | 偶数索引和 | 奇数索引和 | 条件满足? |
|---|---|---|---|
| 是 | |||
| 是 | |||
| 是 | |||
| 是 | |||
| 是 | |||
| 是 |
在第二个测试用例中,数组 不是好的:
| 子数组 | 偶数索引和 | 奇数索引和 | 条件满足? |
|---|---|---|---|
| 是 | |||
| 否 | |||
| 是 | |||
| 否 | |||
| 是 | |||
| 是 |
但是,如果我们在索引 上执行一次操作,数组变为 并且现在是好的:
| 子数组 | 偶数索引和 | 奇数索引和 | 条件满足? |
|---|---|---|---|
| 是 | |||
| 是 | |||
| 是 | |||
| 是 | |||
| 是 | |||
| 是 |
因此,答案是 。
2134B 加 0 或 K
来源:Codeforces Round 1045 (Div. 2)-B. Add 0 or K
Tags: 构造算法 数学 数论
| 时间限制 | 内存限制 |
|---|---|
| 1.5 秒 | 256 megabytes |
给定一个包含 个正整数的数组 和一个正整数 。
在一次操作中,你可以给每个 加上 或 ,即选择另一个包含 个整数的数组 ,其中每个 是 或 ,并将 更新为 ()。注意,你可以为数组 的每个元素选择不同的值。
你的任务是执行最多 次这样的操作,使得 。可以证明这总是可行的。
输出操作后的最终数组。你不需要输出操作本身。
表示 的最大公约数 (GCD)。
输入
每个测试包含多个测试用例。第一行包含测试用例的数量 ()。接下来是测试用例的描述。
每个测试用例的第一行包含两个整数 和 (, ) —— 分别是数组 的长度和给定的常数。
每个测试用例的第二行包含 个整数 () —— 数组 的元素。
保证所有测试用例的 的总和不超过 。
输出
对于每个测试用例,在新的一行输出包含 个整数的数组 —— 操作后的最终数组。输出中的整数应在 到 的范围内。
如果有多个有效输出,你可以输出其中任何一个。
注意,你不需要最小化操作次数。
测试用例
输入
8
3 3
2 7 1
4 5
2 9 16 14
4 1
1 2 3 4
5 2
5 6 7 8 9
2 10
7 9
1 1000000000
1
1 371
1000000000
3 6
1 3 5输出
8 10 10
7 14 21 14
2 2 4 4
9 6 9 12 9
77 99
1000000000000000001
1000000000
25 15 5注意
在第一个测试用例中,输出 是有效的,因为 ,并且数组 可以通过最多 次操作转换为 。一种可能的操作序列如下所示:
| 操作 | 结果 | |
|---|---|---|
其他输出如 、 和 也被认为是有效的。
在第二个测试用例中,输出 是有效的,因为:
- 。
- 从 开始,应用 的操作得到 ,所需操作次数不超过 次。
2123D 二进制字符串对战
来源:Codeforces Round 1034 (Div. 3)-D. Binary String Battle
Tags: 构造算法 游戏 贪心
| 时间限制 | 内存限制 |
|---|---|
| 2 秒 | 256 megabytes |
Alice 和 Bob 被给定一个长度为 的二进制字符串 ,以及一个整数 ()。
如果 Alice 能够将 的所有字符变为零,则她获胜。如果 Alice 无法在有限步内获胜,则 Bob 获胜。
Alice 和 Bob 轮流行动,Alice 先手。
- 在 Alice 的回合,她可以选择 中任意一个长度为 的子序列,然后将该子序列中的所有字符设置为零。
- 在 Bob 的回合,他可以选择 中任意一个长度为 的子串,然后将该子串中的所有字符设置为一。
注意,如果在游戏过程中的任何时刻(包括在 Alice 和 Bob 的回合之间)字符串全为零,则 Alice 获胜。
判断在双方都采取最优策略的情况下谁会获胜。
字符串 的一个子序列是 中的一组字符。注意这些字符不必相邻。
字符串 的一个子串是 中一组连续的字符。注意这些字符必须相邻。
输入
第一行包含一个整数 () —— 测试用例的数量。
每个测试用例的第一行包含两个整数 和 (, )。
每个测试用例的第二行包含一个长度为 的二进制字符串 。
保证所有测试用例的 的总和不超过 。
输出
对于每个测试用例,在一行中输出 "Alice"(如果 Alice 在最优策略下获胜)或 "Bob"(如果 Bob 在最优策略下获胜)。
你可以以任何大小写形式输出答案(大写或小写)。例如,字符串 "aLiCe"、"alice"、"ALICE" 和 "alICE" 都将被识别为 "Alice"。
测试用例
输入
6
5 2
11011
7 4
1011011
6 1
010000
4 1
1111
8 3
10110110
6 4
111111输出
Bob
Alice
Alice
Bob
Bob
Alice注意
在第三个样例中,Alice 可以选择由 组成的子序列,将 变为 。然后她立即获胜。
在第四个样例中,可以证明 Alice 无法保证在有限步内将 变为 。
2118B 使其成为排列
来源:Codeforces Round 1030 (Div. 2)-B. Make it Permutation
Tags: 构造算法
| 时间限制 | 内存限制 |
|---|---|
| 1 秒 | 256 megabytes |
存在一个大小为 的矩阵 ,其中对于所有 ,有 。
在一次操作中,你可以选择一行并反转该行中的任意一个子数组 。
请找出一系列最多 次的操作,使得每一列都包含一个长度为 的排列 。
可以证明这样的构造总是可能的。如果有多个解决方案,输出其中任意一个。
如果数组 可以通过从数组 的开头删除零个或多个元素以及从末尾删除零个或多个元素得到,则称 是 的一个子数组。
长度为 的排列是一个由 到 的 个不同整数按任意顺序组成的数组。例如, 是一个排列,但 不是排列( 在数组中出现两次), 也不是排列( 但数组中出现了 )。
输入
每个测试包含多个测试用例。第一行包含测试用例的数量 ()。接下来是测试用例的描述。
每个测试用例的第一行包含一个整数 () —— 表示矩阵的行数和列数。
保证所有测试用例的 的总和不超过 。
输出
对于每个测试用例,在第一行打印一个整数 ,表示你希望执行的操作次数。在接下来的行中,你应该打印这些操作。
要打印一个操作,请使用格式 "" ( 且 ),这表示反转子数组 , , , 。
测试用例
输入
2
3
4输出
4
2 1 3
2 2 3
3 1 2
3 2 3
5
2 1 4
3 1 3
3 2 4
4 3 4
4 1 2注意
在第一个测试用例中,以下操作是一个有效的解决方案:

2113B 良好的开端
来源:Codeforces Round 1031 (Div. 2)-B. Good Start
Tags: 构造算法 数学
| 时间限制 | 内存限制 |
|---|---|
| 1 秒 | 256 megabytes |
屋顶是一个大小为 的矩形,其左下角位于平面上的点 。你的团队需要用尺寸为 的相同屋顶板材完全覆盖这个屋顶,并满足以下条件:
- 板材不能旋转(即使是 也不行)。
- 板材不能重叠(但可以在边缘处接触)。
- 板材可以超出矩形屋顶的边界。
你团队中的一个新手已经将两块这样的板材放置在屋顶上,使得这两块板材不重叠,并且每块都部分覆盖了屋顶。
你的任务是判断是否可以在不移除已放置的两块板材的情况下完全铺满屋顶。
输入
每个测试包含多个测试用例。第一行包含测试用例的数量 ()。接下来是测试用例的描述。
每个测试用例的第一行包含四个整数 , , , 和 () —— 分别是屋顶的尺寸和屋顶板材的尺寸。
每个测试用例的第二行包含四个整数 , , , 和 () —— 已放置屋顶板材的左下角坐标。保证这些板材不重叠。
输出
对于每个测试用例,如果可以在不移除已放置的两块板材的情况下完全铺满屋顶,则输出 "Yes"(不带引号),否则输出 "No"(不带引号)。
你可以以任何大小写形式输出答案(大写或小写)。例如,字符串 "yEs"、"yes"、"Yes" 和 "YES" 将被识别为肯定响应。
测试用例
输入
7
6 5 2 3
-1 -2 5 4
4 4 2 2
0 0 3 1
10 9 3 2
0 0 4 3
10 9 3 2
0 0 6 3
5 5 2 2
-1 -1 4 -1
5 5 2 2
-1 -1 2 3
7 8 2 4
0 0 0 5输出
Yes
No
No
Yes
No
Yes
No注意
在第一个测试用例中,可以按如下方式添加 块屋顶板材:

在第二个测试用例中,无法完全铺满屋顶:

2092C 亚丝娜与仰慕者
来源:Codeforces Round 1014 (Div. 2)-C. Asuna and the Mosquitoes
Tags: 构造算法 贪心 数学
| 时间限制 | 内存限制 |
|---|---|
| 2 秒 | 256 megabytes |
在亚丝娜生日时,她的 位仰慕者每人送给她一座塔。第 位仰慕者送的塔的高度为 。
亚丝娜对收到的礼物的美观度评估为 。她可以执行任意次(包括零次)以下操作:
- 选择满足 的索引 和 ,使得 为奇数且 ,然后将 减少 ,将 增加 。
容易看出,在操作过程中塔的高度保持非负。
帮助亚丝娜找出在经过任意次操作后,礼物美观度的最大可能值!
输入
每个测试包含多个测试用例。输入数据的第一行包含一个整数 () —— 测试用例的数量。接下来是测试用例的描述。
每个测试用例的第一行包含一个整数 () —— 亚丝娜的仰慕者数量。
每个测试用例的第二行包含 个整数 () —— 塔的高度。
保证所有测试用例的 的总和不超过 。
输出
对于每个测试用例,输出一个整数:亚丝娜能够达到的礼物美观度的最大值。
测试用例
输入
4
3
5 3 9
2
3 2
4
1 2 2 1
5
5 4 3 2 9输出
9
5
5
21注意
在第一个测试用例中,没有一对塔满足应用操作所需的条件,因此无法执行任何操作。在这种情况下,答案是 。
在第二个测试用例中,操作 和 可以应用两次。之后,数组变为:。因此,答案是 5。
在第三个测试用例中,可以应用以下操作序列:
-
操作 和 。
-
操作 和 。
-
操作 和 。
。
因此,答案是 5。
2072C 为储物库创建密钥已成为我的主要技能
来源:Codeforces Round 1006 (Div. 3)-C. Creating Keys for StORages Has Become My Main Skill
Tags: 位掩码 构造算法 贪心
| 时间限制 | 内存限制 |
|---|---|
| 2 秒 | 256 megabytes |
Akito 仍然无处可住,而且小房间的价格到处都很高。因此,Akito 决定在一家银行找一份工作,担任储物库的钥匙创建员。
在这个奇幻的世界里,一切都不同。例如,代码为 的储物库的钥匙是一个长度为 的数组 ,满足:
- ,其中 表示数字 和 的按位"或"运算。
- 在所有满足上述条件的数组中, 的值是最大的。
Akito 勤奋地工作了几个小时,但突然头痛起来。请替他工作一小时;对于给定的 和 ,为代码 的储物库创建任意一把钥匙。
是指最小的非负整数 ,使得 不在集合 中,并且所有 都在集合 中。
输入
第一行包含一个数字 () —— 测试用例的数量。
每个测试用例仅一行,给出两个数字 和 () —— 分别是数组的长度和期望的按位"或"值。
保证所有测试用例的 的总和不超过 。
输出
对于每个测试用例,输出 个整数 () —— 满足所有条件的钥匙数组的元素。
如果有多个合适的数组,输出其中任意一个。
测试用例
输入
9
1 69
7 7
5 7
7 3
8 7
3 52
9 11
6 15
2 3输出
69
6 0 3 4 1 2 5
4 1 3 0 2
0 1 2 3 2 1 0
7 0 6 1 5 2 4 3
0 52 0
0 1 8 3 0 9 11 2 10
4 0 3 8 1 2
0 32056C 回文子序列
来源:Codeforces Round 997 (Div. 2)-C. Palindromic Subsequences
Tags: 暴力破解 构造算法 数学
| 时间限制 | 内存限制 |
|---|---|
| 2 秒 | 512 megabytes |
对于一个整数序列 ,我们定义 为 中最长的回文 子序列 的长度。
令 表示长度为 的回文子序列的数量。换句话说, 统计了 中具有最大长度的回文子序列的数量。
给定一个整数 ,你的任务是找到任意一个满足以下条件的包含 个整数的序列 :
- 对于所有 ,有 。
可以证明,在给定的约束下,这样的序列总是存在的。
如果序列 可以通过从序列 中任意位置删除若干个(可能为零或全部)元素得到,则称 是 的一个子序列。
回文是指从左向右读和从右向左读都相同的序列。例如,、 和 是回文,而 和 不是。
输入
每个测试包含多个测试用例。第一行包含测试用例的数量 ()。接下来是测试用例的描述。
每个测试用例的第一行包含一个整数 () —— 序列的长度。
注意:没有关于所有测试用例 的总和的约束。
输出
对于每个测试用例,输出 个整数 ,表示一个满足条件的数组。
如果有多个解决方案,你可以输出其中任意一个。
测试用例
输入
3
6
9
15输出
1 1 2 3 1 2
7 3 3 7 5 3 7 7 3
15 8 8 8 15 5 8 1 15 5 8 15 15 15 8注意
在第一个例子中,一个可能的解决方案是 。在这种情况下,,因为最长的回文子序列长度为 。有 种方法可以选择长度为 的回文子序列,如下所示:
因此,,大于 。因此, 是一个有效的解决方案。
在第二个例子中,一个可能的解决方案是 。在这种情况下,。有 种方法可以选择长度为 的回文子序列。一些例子是 和 。因此,,大于 。因此, 是一个有效的解决方案。
在第三个例子中, 且 ,大于 。
2041E 美丽数组
Tags: 构造算法 数学
| 时间限制 | 内存限制 |
|---|---|
| 2 秒 | 1024 megabytes |
图片由 ChatGPT 4o 生成。
A-Ming 的生日快到了,他的朋友 A-May 决定送他一个整数数组作为礼物。A-Ming 有两个最喜欢的数字 和 ,他认为一个数组是美丽的,当且仅当它的均值恰好等于 ,中位数恰好等于 。请帮助 A-May 找到一个美丽的数组,让她的礼物能给 A-Ming 留下深刻印象。
数组的均值是其元素之和除以其长度。例如,数组 的均值是 。
数组的中位数是排序后位于中间的元素(如果长度为奇数),或者是排序后中间两个元素的均值(如果长度为偶数)。例如, 的中位数是 ,而 的中位数是 。
注意,均值和中位数不一定四舍五入为整数。例如,数组 的均值是 。
输入
仅一行,包含两个整数 和 。
- 。
- 数组的长度必须在 到 之间。
- 数组的元素必须是整数,且其绝对值不得超过 。
输出
第一行输出数组的长度。
第二行输出数组的元素。
如果有多个解决方案,你可以输出任意一个。可以证明,在问题的约束下,总是存在解决方案。
测试用例
输入 1
3 4输出 1
4
3 -1 5 5输入 2
-100 -100输出 2
1
-1002003C 乌龟与好对
来源:Codeforces Round 968 (Div. 2)-C. Turtle and Good Pairs
Tags: 构造算法 贪心 排序
| 时间限制 | 内存限制 |
|---|---|
| 2 秒 | 256 megabytes |
乌龟给你一个由小写拉丁字母组成的字符串 。
乌龟认为一对整数 () 是愉快对,当且仅当存在一个整数 满足 ,并且同时满足以下两个条件:
- ;
- 或 。
此外,乌龟认为一对整数 () 是好对,当且仅当 或 是一个愉快对。
乌龟想要重新排列字符串 ,使得好对的数目最大化。请帮助他!
输入
每个测试包含多个测试用例。第一行包含测试用例的数量 ()。接下来是测试用例的描述。
每个测试用例的第一行包含一个整数 () —— 字符串的长度。
每个测试用例的第二行包含一个长度为 的字符串 ,由小写拉丁字母组成。
保证所有测试用例的 的总和不超过 。
输出
对于每个测试用例,输出重新排列后的字符串 ,使得好对的数目最大化。如果有多个答案,输出其中任意一个。
测试用例
输入
5
3
abc
5
edddf
6
turtle
8
pppppppp
10
codeforces输出
acb
ddedf
urtlet
pppppppp
codeforces注意
在第一个测试用例中,在重新排列后的字符串中, 是一个好对。可以看出,我们无法通过重新排列字符串使得好对的数目大于 。bac 和 cab 也可以是答案。
在第二个测试用例中,在重新排列后的字符串中,、、、、、 都是好对。efddd 也可以是答案。
1983B 角落旋转
来源:Codeforces Round 956 (Div. 2) and ByteRace 2024-B. Corner Twist
Tags: 构造算法 贪心 实现 数学
| 时间限制 | 内存限制 |
|---|---|
| 1 秒 | 256 megabytes |
给你两个数字网格 和 ,都有 行和 列。网格中的所有值都是 、 或 。
你可以在 上执行任意次以下操作:
- 在网格中选取任意一个长和宽都 的子矩形。允许选择整个网格作为子矩形。
- 该子矩形有四个角。取所选子矩形的任意一对对角,将它们的值加 后对 取模。
- 对于未被选中的那对角,将它们的值加 后对 取模。
注意,该操作只改变所选子矩形角上的值。
是否可以通过应用上述操作任意次(包括零次)将网格 转换为网格 ?
输入
第一行包含一个整数 ,表示测试用例的数量 ()。
对于每个测试用例:
第一行包含两个整数 和 ,表示网格的行数和列数 ()。
接下来的 行,每行包含 个字符 —— 第 行的第 个字符表示 。
再接下来的 行,每行包含 个字符 —— 第 行的第 个字符表示 ()。
保证所有测试用例的 的总和以及所有测试用例的 的总和不超过 。
输出
对于每个测试用例,如果可以将网格 转换为网格 ,则打印 "YES"(不带引号),否则打印 "NO"(不带引号)。
你可以以任何大小写形式输出答案(大写或小写)。例如,字符串 "yEs"、"yes"、"Yes" 和 "YES" 将被识别为肯定响应。
测试用例
输入
7
3 3
000
000
000
111
111
111
4 4
0000
0000
0000
0000
2100
1200
0012
0021
4 4
1020
1200
1210
0000
0000
1200
2200
0000
3 3
012
012
012
010
111
011
8 8
00000000
00000000
00000000
00000000
00000000
00000000
00000000
10000000
00000000
01200000
02010000
00102000
00020100
00001020
00000210
10000000
2 7
0000000
0000000
2220111
0111222
2 7
0000000
0100010
2220111
1210202输出
YES
YES
YES
NO
YES
NO
YES注意
在第一个测试用例中,网格 可以通过以下方式转换为 :
这里,在每次操作中,用框突出显示的右上角和左下角的值加 后对 取模,而左上角和右下角的值加 后对 取模。
在第四个测试用例中,可以证明无法通过上述操作任意次将网格 转换为网格 。
1979C 投注盈利
来源:Codeforces Round 951 (Div. 2)-C. Earning on Bets
Tags: 二分查找 组合数学 构造算法 数论
| 时间限制 | 内存限制 |
|---|---|
| 2 秒 | 256 megabytes |
你被邀请参与一个游戏。在这个游戏中,有 种可能的结果,对于每一种结果,你必须下注一定数量的整数金币。如果第 种结果获胜,你将获得在该结果上下注的金币数量乘以 的回报。注意,恰好只有一种结果会获胜。
你的任务是确定如何分配金币,使得在任何一种结果获胜的情况下,你都能盈利。更正式地说,你在所有结果上下注的金币总数必须严格小于每一种可能获胜结果所获得的回报金币数。
输入
每个测试包含多个测试用例。第一行包含一个整数 () —— 测试用例的数量。接下来是测试用例的描述。
每个测试用例的第一行包含一个整数 () —— 结果的数量。
每个测试用例的第二行包含 个整数 () —— 如果第 种结果获胜,回报金币的乘数。
保证所有测试用例的 的总和不超过 。
输出
对于每个测试用例,如果无法按要求分配金币,则输出 。否则,输出 个整数 () —— 你在各个结果上的下注金额。
可以证明,如果存在解,则总存在满足这些约束的解。
如果有多个合适的解决方案,输出其中任意一个。
测试用例
输入
6
3
3 2 7
2
3 3
5
5 5 5 5 5
6
7 9 3 17 9 13
3
6 3 2
5
9 4 6 8 3输出
27 41 12
1 1
-1
1989 1547 4641 819 1547 1071
-1
8 18 12 9 24注意
在第一个测试用例中,金币可以按如下方式分配:在第一个结果上下注 枚金币,在第二个结果上下注 枚金币,在第三个结果上下注 枚金币。那么在所有结果上下注的金币总数为 枚金币。如果第一个结果获胜,你将获得 枚金币的回报;如果第二个结果获胜,你将获得 枚金币的回报;如果第三个结果获胜,你将获得 枚金币的回报。所有这些值都严格大于 。
在第二个测试用例中,一种方法是在每个结果上下注一枚金币。
1935B MAC 中的信息学
来源:Codeforces Round 932 (Div. 2)-B. Informatics in MAC
Tags: 构造算法
| 时间限制 | 内存限制 |
|---|---|
| 1 秒 | 256 megabytes |
在硕士援助中心,Nyam-Nyam 收到了一份信息学的作业。
有一个长度为 的数组 ,你需要将其分割成 个子段,使得每个子段的 都等于同一个整数。
请帮助 Nyam-Nyam 找到任何合适的分割方法,或者确定这种分割不存在。
将数组分割成 个子段定义为 对整数 ,满足 ,并且对于每个 ,有 ,同时 且 。这些数对代表了各个子段本身。
是指不属于该数组的最小非负整数。
例如:
- 数组 的 是 ,因为 不在数组中。
- 数组 的 是 ,因为 和 在数组中,但 不在。
- 数组 的 是 ,因为 、、、 都在数组中,但 不在。
输入
每个测试包含多个测试用例。第一行包含一个整数 () —— 测试用例的数量。接下来是测试用例的描述。
每个测试用例的第一行包含一个整数 () —— 数组 的长度。
每个测试用例的第二行包含 个整数 () —— 数组 的元素。
保证所有测试用例的 的总和不超过 。
输出
对于每个测试用例,如果不存在合适的分割方法,则输出一个整数 。
否则,在第一行输出一个整数 () —— 分割后的子段数量。
然后输出 行 —— 分割后的子段信息。第 行应包含两个整数 和 () —— 第 个子段的边界。
必须满足以下条件:
- 对于所有 ,有 ;
- ,。
如果有多个可能的解决方案,输出其中任意一个。
测试用例
输入
5
2
0 0
5
0 1 2 3 4
8
0 1 7 1 0 1 0 3
3
2 2 2
4
0 1 2 0输出
2
1 1
2 2
-1
3
1 3
4 5
6 8
3
1 1
2 2
3 3
-1注意
在第一个测试用例中,数组 可以被分割成 个子段,边界为 和 :
- 第一个子段 的 是 ,因为 在子段中,但 不在。
- 第二个子段 的 是 ,因为 在子段中,但 不在。
在第二个测试用例中,可以证明不存在要求的分割方法。
在第三个测试用例中,数组 可以被分割成 个子段,边界为 、、:
- 第一个子段 的 是 ,因为 和 在子段中,但 不在。
- 第二个子段 的 是 ,因为 和 在子段中,但 不在。
- 第三个子段 的 是 ,因为 和 在子段中,但 不在。
1916C 奥赛前的训练
来源:Good Bye 2023-C. Training Before the Olympiad
Tags: 构造算法 游戏 贪心 实现 数学
| 时间限制 | 内存限制 |
|---|---|
| 1 秒 | 256 megabytes |
Masha 和 Olya 即将参加一场重要的团队奥赛。为此,Masha 提议与 Olya 玩一个游戏作为热身:
有一个大小为 的数组 。Masha 先手,玩家轮流行动。每次移动按以下步骤进行:
如果数组大小为 ,则游戏结束。
当前行动的玩家选择两个不同的索引 , (),并执行以下操作 —— 从数组中移除 和 ,并向数组添加一个等于 的数字。换句话说,先将数字 , 的和除以 并向下取整,然后将结果乘以 。
Masha 的目标是最大化最终的数字,而 Olya 的目标是最小化它。
Masha 和 Olya 决定在初始数组 的每个非空前缀上进行游戏,并请求你的帮助。
对于每个 ,回答以下问题。假设游戏中只包含数组 的前 个元素,索引分别为 。在双方都采取最优策略的情况下,游戏结束时剩下的数字是多少?
输入
第一行包含一个整数 () —— 测试用例的数量。
每个测试用例的第一行包含一个整数 () —— 数组的大小。
第二行包含 个整数 () —— Masha 和 Olya 进行游戏的数组。
保证所有测试用例的 的总和不超过 。
输出
对于每个测试用例,输出 个整数。其中第 个数字应等于在双方都采取最优策略的情况下,在由数组 的前 个元素组成的数组上进行游戏后最终剩下的数字。
测试用例
输入
4
1
31
6
6 3 7 2 5 4
3
3 10 11
5
7 13 11 19 1输出
31
6 8 16 18 22 26
3 12 24
7 20 30 48 50 注意
在第三个测试用例中,对于长度为 的前缀,答案是 。对于长度为 的前缀,Masha 只有一种走法,因此答案是 。对于长度为 的前缀,Masha 有三种可能的走法:她选择 和 ,则最终数字是 ;选择 和 ,则最终数字是 ;选择 和 ,则最终数字是 。因此 Masha 会选择 和 得到 。
Last updated on