向量压缩

PDF 视图

提交程序

分数: 1
时间限制: 1.0s
内存限制: 512M

作者:
题目类型

题目描述

在遥远的 \(\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]\)。


评论

目前没有评论。