向量压缩
PDF 视图题目描述
在遥远的 \(\alpha\) 星球上,人们每天需要处理和传输极长的数字向量。为了在星球一年一度的挑战赛中大幅提高自己的排名,你灵机一动,发明了一种名为“超高性能向量压缩感知”的全新压缩协议。
这个协议的核心灵感来源于古老的游戏“消消乐”:在向量的动态变化过程中,一旦出现了任意相邻的 \(k\) 个完全相同的元素,这 \(k\) 个元素就会瞬间发生“湮灭”并从向量中彻底消失。
更神奇的是,湮灭操作会引发连锁反应——当一段元素消失后,它前后的元素会重新拼接在一起。如果拼接后再次凑齐了相邻的 \(k\) 个相同元素,它们将继续发生湮灭,直到向量中不再存在相邻的 \(k\) 个相同元素为止。
现在,你想要实现一个程序,来模拟多组向量在这个压缩协议下的最终形态。
输入格式
第一行输入正整数 \(T\),表示测试数据组数。
对于每组测试数据:
第一行包含两个正整数 \(n\) 和 \(k\),分别表示向量的初始长度和触发湮灭的阈值 \(k\)。
第二行包含 \(n\) 个正整数 \(A_1, A_2, \dots, A_n\),表示向量的初始元素值。
\(1 \le T \le 10\)
对于每组数据: \(1 \le n \le 10^5, 2 \le k \le 10^5, 1 \le A_i \le 10^5\)
输出格式
对于每组测试数据:
输出包含两行,第一行输出一个非负整数 \(L\),表示最终压缩后向量的长度。
第二行输出 \(L\) 个由空格隔开的正整数,表示最终的向量样子,保证最终向量不会被完全湮灭。
样例输入
1
7 2
1 2 2 1 4 5 2
样例输出
3
4 5 2
提示
样例 1 解释: 初始向量为 \([1, 2, 2, 1, 4, 5, 2]\),触发阈值 \(k = 2\)。 扫描发现相邻的两个 \(2\),触发湮灭,向量拼接后变为 \([1, 1, 4, 5, 2]\)。 湮灭引发连锁反应,新拼接产生的两个相邻的 \(1\) 再次触发湮灭,向量变为 \([4, 5, 2]\)。 当前向量中不再存在相邻的 \(2\) 个相同元素,压缩结束。最终剩余 \(3\) 个元素,依次为 \([4, 5, 2]\)。
评论