CF2085B.Serval and Final MEX
普及-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
给定一个由 n≥4 个非负整数组成的数组 a。
你需要对 a 执行以下操作,直到其长度变为 1:
- 选择两个下标 l 和 r(1≤l<r≤∣a∣),将子数组 [al,al+1,…,ar] 替换为一个整数 mex([al,al+1,…,ar])。其中 mex(b) 表示整数集合 b 的最小未出现值(MEX)∗。具体来说,令 x=mex([al,al+1,…,ar]),数组 a 将变为 [a1,a2,…,al−1,x,ar+1,ar+2,…,a∣a∣]。注意此操作后 a 的长度将减少 (r−l)。
Serval 希望最终 a 中的唯一元素为 0。请帮助他完成这一目标!
更正式地说,你需要找到一个操作序列,使得按顺序执行这些操作后,数组 a 的长度变为 1,且该元素为 0。
可以证明,在题目约束下至少存在一个有效的操作序列,且任何有效操作序列的长度不超过 n。
注意:你不需要最小化操作次数。
∗整数集合 b1,b2,…,bk 的最小未出现值(MEX)定义为不包含在该集合中的最小非负整数 x。
输入格式
每个测试包含多个测试用例。第一行输入测试用例数 t(1≤t≤1000)。接下来描述每个测试用例。
每个测试用例的第一行包含一个整数 n(4≤n≤5000)——数组 a 的长度。
第二行包含 n 个整数 a1,a2,…,an(0≤ai≤n)——数组 a 的元素。
保证所有测试用例的 n 之和不超过 5000。
输出格式
对于每个测试用例:
- 第一行输出一个整数 k(0≤k≤n)——操作序列的长度。
- 随后输出 k 行,第 i 行包含两个整数 li 和 ri(1≤li<ri≤∣a∣)——第 i 次操作中选择的下标,其中 ∣a∣ 表示操作前数组的长度。
若存在多个答案,输出任意一种即可。
输入输出样例
输入#1
6 4 1 2 3 4 5 0 1 0 0 1 6 0 0 0 0 0 0 6 5 4 3 2 1 0 4 0 0 1 1 4 1 0 0 0
输出#1
1 1 4 4 1 2 1 2 1 2 1 2 4 5 6 3 4 1 2 1 3 3 4 5 4 5 1 4 2 1 2 1 3 2 2 4 1 2
说明/提示
第一个测试案例中,由于 mex([1,2,3,4])=0,经过一次操作后数组变为 [0]。
第二个测试案例中,数组 a 的变化如下:
[0,1,0,0,1]→[2,0,0,1]→[1,0,1]→[2,1]→[0].
第三个测试案例中,数组 a 的变化如下:
[0,0,0,0,0,0]→[0,0,0,0,1]→[0,0,1,1]→[1,1,1]→[0].
翻译由 DeepSeek R1 完成
输入解题思路,AI测评打分。不知道怎么写?