#P12780. 子序列
子序列
子序列
Problem Description
给出一个长度为 的序列 。 现在有 种数字,分别为 ,同时有一个频度序列 ,表示数字 的出现次数为 。 你需要构造一个长度为 的序列 ,满足:
- 对于所有 ,数字 的出现次数为 。
- 满足上述条件的情况下。设 的极长相同连续段的数量为 , 中出现的数字种类为 。要求 的极长相同连续段数小于等于 。
- 满足上述条件的情况下。要求序列 含有子序列 的数量最多。
- 满足上述条件的情况下。要求 的字典序最小。 子序列:如果 可以通过 删除若干个(可能是零个或全部)元素,且不改变剩余元素的相对顺序得到,则称 是 的子序列。 字典序:当且仅当以下条件之一成立时,序列 的字典序小于序列
- 是 的前缀,但 。
- 在 与 不同的第一个位置,序列 中的元素小于序列 中的元素。
Input
每个测试点中包含多组测试数据。输入的第一行包含一个正整数 ,表示数据组数。对于每组测试数据: 第一行一个正整数 ,分别表示数字的范围和序列 的长度。 第二行 个正整数 ,表示序列 。 第三行 个整数 ,表示每个数字在 中的出现次数。 保证所有测试数据中 之和与 之和均不超过 , 之和不超过 。
Output
对于每组测试数据:你需要以连续段的形式给出序列 ,具体地: 第一行一个正整数 ,表示 相同数字的连续段个数。 接下来 行,从左到右地给出连续段。每行两个用空格隔开的正整数 ,表示有 个数字 构成一个连续段。 显然,相邻连续段的数字不能相同。
Sample Input
1
5 4
2 3 4 5
2 2 2 2 2
Sample Output
5
2 1
2 2
2 3
2 4
2 5
Source
2025“钉耙编程”中国大学生算法设计暑期联赛(2)