诈骗犯,带走!
写在前面
由于是诈骗题,建议先思考一遍题目。
题目一
对于一个序列 ,定义它的 Mex 变换 如下:
- 对于每一个 ,有 。
给定一个长度为 的序列 ,你每次操作可以选择一个区间,并将这个区间替换为它的 Mex 变换。
你最多可以进行 次操作,你需要最小化操作完成后序列的字典序。构造任意方案。注意:你并不需要最小化你的操作次数。
输入格式
第一行两个整数 。
接下来一行 个整数,表示序列 。
输出格式
第一行输出一个整数 表示你使用的操作次数。
接下来 行,每行输出两个整数,表示你依次操作的每一个区间。
样例
输入1
1 | 4 3 |
输出1
1 | 3 |
输入2
1 | 6 1 |
输出2
1 | 1 |
数据范围
,。
解答
先思考: 运算有什么性质?
- 。人话:如果一个集合中所有数都 ,则这个集合的 值一定为 。
- 。人话:如果一个集合中有 ,则这个集合的 值一定 。
此题仅仅用到以上两个性质。
记 中 的数量为 。
当 时,也就是最多只能做一次操作。
- 当 时,答案为 。对 做一次变换即可。
- 当 时,答案为 。本来数列就全零,不需要操作。
- 其他情况下,答案为 。记 中从左到右第一个最大连续非零区间为 ,对 做一次变换即可。
其他情况下,讨论 的大小。
- 当 时,答案为 。对 做一次变换即可。
- 当 时,记这一个 的下标为 。先对 做一次变换,再对 做一次变换即可。答案为 或 。
- 当 时,答案其实是 。具体过程是先对 做一次变换,再对 做一次变换。第一次变换会将所有数变为 的数,而第二次变换则会将所有数变为 。
评价
名副其实的诈骗题。题目中说”输出任意方案“让人摸不着头脑,样例中又给了奇奇怪怪的输出。第一眼会想打暴力分,可是暴力很长,一般都写不对。看了解答后才会大呼一声:”原来如此!“真是防不甚防。