Two Arrays
题目
给你两个长度为 的数组 和 。你可以无限次地执行以下操作:
- 选一个整数 ,范围从 到 ,然后交换 和 。
设 是数组 中不同数字的个数。求 的最大值。同时输出执行完所有操作后的数组 和 。
输入
输入包含多组测试数据。第一行是测试组数 ()。接下来是各组测试数据的描述。
每组测试数据第一行是一个整数 (),表示数组长度。
第二行包含 个整数 (),表示数组 的元素。
第三行包含 个整数 (),表示数组 的元素。
保证所有测试组的 总和不超过 。
输出
每组测试数据,第一行输出一个整数—— 的最大值。
第二行输出 个整数——执行操作后数组 的元素。
第三行输出 个整数——执行操作后数组 的元素。
样例输入
3
5
1 2 4 4 4
1 3 3 5 2
7
2 2 4 4 5 5 5
1 3 3 2 1 6 6
7
12 3 3 4 5 6 4
1 2 13 8 10 13 7
样例输出
9
1 3 4 5 2
1 2 3 4 4
12
2 3 4 2 1 5 6
1 2 3 4 5 6 5
14
12 3 13 8 10 6 4
1 2 3 4 5 13 7
说明
第一组测试中,经过三次操作,分别选取 、 和 ,最终得到 和 。此时 。可以证明无法得到更大的答案。
第二组测试中,经过如下操作:
Alone
题目
小苯有一个 行 列,仅由整数 和 构成的 01 矩阵,其中 表示白色格子, 表示黑色格子。
他定义 01 矩阵中从上往下数第 行和从左往右数第 列的单元格 为“孤立点”,当且仅当:
该格子是黑色的;
在第 行中,它是唯一的黑色格子;
在第 列中,它也是唯一的黑色格子。
矩阵的孤立度定义为其中所有“孤立点”的个数。
现在,小苯预先确定了 个不同位置的格子必须是黑色。给定这 个格子的位置 。
小苯考虑所有满足以下条件的 的 01 矩阵,这些矩阵都包含所有预先确定的黑色格子,其余格子的颜色由小苯自由选择。在所有可能的矩阵中,他想知道这些矩阵的孤立度之和是多少。
换句话说,对所有满足条件的矩阵,将每个矩阵的孤立度相加,求这个总和。由于答案可能很大,请将答案对 取模后输出。
输入
每个测试文件均包含多组测试数据。第一行输入一个整数 代表数据组数,每组测试数据描述如下:
第一行输入三个整数 ,表示 01 矩阵的行数、列数和预先确定的黑色格子个数。
此后 行,第 行输入两个整数 ,表示第 i 个预先确定的黑色格子位置。保证这 个格子两两不同。
除此之外,保证单个测试文件的 之和不超过 。
输出
对于每一组测试数据,新起一行输出一个整数表示所有满足条件的矩阵的孤立度之和对 取模的结果。
样例输入
2
2 2 0
2 2 1
1 1
样例输出
8
3
Not Equal
题目
小苯有一个长度为 n 的序列 ,序列中的每个元素都是正整数。
小苯可以进行任意次操作(可以不操作),每次操作可以从以下两种形式中任选一种进行:
选择序列中任意一个位置,并将 变为 ,该操作花费 ;
选择序列中任意一个位置,满足 ,将 变为 ,该操作花费 。
小苯希望序列中相邻两个元素都不相同。你的任务就是求出,满足条件的最少花费。可以证明一定可以通过有限轮操作得到满足条件的序列。
输入
每个测试文件均包含多组测试数据。第一行输入一个整数 代表数据组数,每组测试数据描述如下:
第一行输入一个整数 ,表示序列的长度。
第二行输入 个正整数 ,表示序列 。
第三行输入 个正整数 ,表示序列 。
第四行输入 个正整数 ,表示序列 。
除此之外,保证单个测试文件的 之和不超过 。
输出
对于每一组测试数据,新起一行输出一个整数,表示满足条件的最小操作花费。
样例输入
2
4
1 3 3 4
1 2 1 2
1 2 3 2
3
10 1 10
1 1 1
1 1 1
样例输出
2
0
说明
对于第一组测试数据,一种最优方案是将序列变为 ,花费为 。
Palindromic Value
题目
小苯有一个长度为 的字符串 ,仅由小写字母组成。
小苯可以将 分割为若干个非空子串,要求每个子串都是回文串。
定义一种分割方案的价值为:所有子串长度的平方和。更具体地,将 表示为 的一种写法,其中 为 的非空连续子串,且每个 都是回文串。分割方案的价值为 ,其中 表示 的长度。
记所有不同分割方案(分割点集合不同视为不同方案)的价值之和为答案。
你的任务就是求出这个答案。由于答案可能很大,请将答案对 取模后输出。
【名词解释】
子串:从原字符串中,连续的选择一段字符(可以全选、可以不选)得到的新字符串。
回文串:若一个字符串从左向右读与从右向左读完全相同,则称其为回文串。
输入
每个测试文件包含多组测试数据。第一行输入一个整数 代表数据组数,每组测试数据描述如下:
第一行一个整数 。
第二行一个长度为 ,仅由小写字母组成的字符串 。
除此之外,保证单个测试文件的 之和不超过 。
输出
对于每一组测试数据,新起一行输出一个整数,表示所有回文分割方案的价值总和对 取模的结果。
样例1输入
2
3
aba
2
ab
样例1输出
12
2
说明
对于第一组测试数据,,有两种可行分割方案:
拆分为 、、,价值 ;
保持原状,价值 。
对于第二组测试数据,,唯一可行方案为拆分为:
、,价值 。
样例2输入
1
4
aaaa
样例2输出
66
说明
对于第一组测试数据,,任意子串均为回文串,所有分割方案对应将 分拆为有序正整数和:
:价值 ;
:价值 ;
:价值 ;
:价值 ;
:价值 ;
:价值 ;
:价值 ;
:价值 。
总和为 。
Find the Zero
题目
这是一个交互式题目。
给你一个整数 。有一个长度为 的隐藏数组 。数组中从 到 的每个整数 恰好出现一次,其余元素全都是 。
你可以进行如下查询:
- 选择两个整数 和 (,)。裁判会根据 给出回答,如果成立则返回 ,否则返回 。
请在不超过 次查询内,找出任意一个满足 的整数 ()。注意,交互者是 自适应的,也就是说隐藏数组 可能会根据你的查询动态变化,但不会与之前的查询结果矛盾。
输入格式
每个测试包含多个测试用例。第一行是测试用例数量 ()。接下来是各个测试用例的描述。
每个测试用例第一行包含一个整数 ()。隐藏数组 a 的长度是 。
保证所有测试用例中 的总和不超过 。
交互说明
发起查询时,输出一行格式如下:
(,)
裁判的回应有:
- 如果 ,返回 ;
- 如果 ,返回 ;
- 如果查询无效或超过 次查询限制,返回 。
报告答案时,输出一行格式:
- ()
然后进入下一个测试用例,或者如果是最后一个测试用例则结束程序。
注意,报告答案不计入 次查询限制。
交互者是 自适应的,隐藏数组 可能会根据你的查询动态调整,但不会与之前的查询结果冲突。
每次输出查询后,别忘了换行并刷新输出缓冲区 ,否则会因为“空闲时间过长”被判定超时。如果在交互中读到 而非有效数据,程序必须立即退出,否则会被判“错误答案”。不退出可能导致程序继续读取关闭的输入流,产生不可预料的判决结果。
本题不支持 hack。
∗刷新输出的方法:
- C++ 中用 fflush(stdout) 或 cout.flush();
- Python 中用 sys.stdout.flush();
- 其他语言请参考对应文档。
样例
| Inputcopy | Outputcopy |
|---|---|
2 | ? 1 2 ? 3 1 ! 3 ? 5 6? 1 2 |
说明
第一个样例中,隐藏数组 是 :
- 第一次查询 。因为 ,,,裁判返回 。
- 第二次查询 。因为 ,,,裁判返回 。
- 程序报告 作为答案。因为 ,答案正确。
第二个样例中,隐藏数组 是 :
- 第一次查询 。因为 ,,,裁判返回 。
- 第二次查询 。因为 ,,,裁判返回 。
- 第三次查询 。因为 ,,,裁判返回 。
- 程序报告 作为答案。因为 ,答案正确。
Ghostfires
题目
OtterZ 决定用幽灵火打造一把武器。他收集了红色、绿色和蓝色的幽灵火若干。他想把这些幽灵火排成一排来制作武器。为了让武器更强大,OtterZ 希望用尽可能多的幽灵火,但如果排成的行中有两个同色幽灵火相邻,或者中间隔着恰好两个幽灵火,那武器就会失控。
具体来说,OtterZ 收集了 个红色幽灵火, 个绿色幽灵火,和 个蓝色幽灵火。他想构造一个字符串 ,由字符 ‘R’、’G’ 和 ‘B’ 组成,满足以下条件:
- 字符串 中 ‘R’、’G’ 和 ‘B’ 的出现次数分别不超过 、 和 。
- 对所有 ,满足 。
- 对所有 ,满足 。
- 字符串 的长度尽可能长。
帮 OtterZ 构造这样一排幽灵火。虽然可能有多个方案,OtterZ 只要其中一个就行。
输入
输入包含多组测试数据。第一行是测试组数 ()。接下来是各组测试数据的描述。
每组测试数据只有一行,包含三个整数 、 和 (,),分别表示红色、绿色和蓝色幽灵火的数量。
保证所有测试组中 的总和不超过 。
输出
对于每组测试,输出一个字符串 ,由字符 ‘R’、’G’ 和 ‘B’ 组成,其中 是 ‘R’、’G’ 或 ‘B’,表示第 个幽灵火的颜色。
如果有多个答案,输出任意一个即可。
样例
| Inputcopy | Outputcopy |
|---|---|
5 | B |
说明
第一组测试中,”B” 是唯一合法的构造。
第二组测试中,”RGB”、”RBG”、”GRB”、”GRB”、”BRG” 和 “BGR” 都是正确答案。
第三组测试中,”GG” 和 “GGG” 都不合法,因为 。
A Trivial String Problem
题目
定义 为字符串 能被拆分成的最大部分数,且每一部分都是 的非空前缀。换句话说, 是满足以下条件的最大正整数 :
- 存在 个字符串 ,它们都是 的前缀,且 。这里 表示字符串的拼接。
给你一个长度为 的字符串 ,仅包含小写英文字母。记 为字符串 从第 个字符到第 个字符(包含两端)的子串。你需要回答 个查询。第 个查询给出两个整数 和 ,你需要求出
字符串 是字符串 的子串,意味着 可以通过从 的开头删去若干(可能是零个或全部)字符,再从结尾删去若干(可能是零个或全部)字符得到。
输入格式
每个测试包含多个测试用例。第一行是测试用例数量 ()。接下来是各个测试用例的描述。
每个测试用例的第一行包含两个整数 和 (, )。
第二行是长度为 的字符串 ,仅由小写英文字母组成。
接下来 行,每行包含两个整数 和 (),表示第 个查询。
保证所有测试用例中 的总和不超过 。
输出格式
对于每个查询,输出一个整数,表示对应表达式的值。
样例
| Inputcopy | Outputcopy |
|---|---|
6 | 1 |
说明
第一个测试用例中,。
第二个测试用例中, 和 。
第三个测试用例中, 和 。