Logo HelloWorld信息学奥赛题库

少儿编程

时间限制:1 s 空间限制:512 MB

#2862. 「LibreOJ NOIP Round #1」序列划分

统计

题目描述

梦想从几时开始,命运在何处终结?

有一个长度为 $n$ 的整数序列 ${a_1, a_2, \cdots, a_n}$。

你的任务是判断是否可以将其划分为 $k$ 的倍数个非空子序列,使得每个元素在恰一个子序列中出现,同时每个子序列均以 $k$ 的倍数开头、$k$ 的倍数结尾,并且长度也为 $k$ 的倍数。若能划分,求出任意一个方案。

序列 ${a_1, a_2, \cdots, a_n}$ 的一个子序列是指将任意多个(可以为 $0$ 个)元素删除后,将其他元素按照原序列中的顺序拼接而成的序列。例如,序列 ${9, 8, 5}$、序列 ${7}$ 和序列 ${9, 8, 7, 6, 5}$ 均为序列 ${9, 8, 7, 6, 5}$ 的子序列,但 ${7, 9, 8}$ 不是。

输入格式

输入的第一行包含一个整数 $T$ —— 表示子任务编号(与「数据范围与提示」中编号相同,样例的子任务编号为 $0$)。

第二行包含两个空格分隔的正整数 $n,k$ —— 序列 $a$ 的长度和 $k$ 的值。

第三行包含 $n$ 个空格分隔的正整数 $a_1, a_2, \cdots, a_n$ —— 依次表示序列 $a$ 的元素。

输出格式

若有解,则第一行输出 Yes,否则第一行输出 No
若有解则按以下格式输出任意一个划分方案:

第二行输出一个整数 $c$ 表示划分成了 $c$ 个子序列,满足 $k\le c\le n$ 且 $c$ 是 $k$ 的倍数;
接下来 $c$ 行每行描述一个子序列:
第 $i$ 行第一个整数 $l_i$ 表示第 $i$ 个子序列的长度,满足 $k\le l_i\le n$ 且 $l_i$ 是 $k$ 的倍数。
接下来 $li$ 个整数 $p{i,1},p{i,2},\cdots,p{i,li}$ 表示这个子序列中元素的下标。满足 $p{i,j}<p{i,j+1}$(即下标单调递增)且 $a{p{i,1}}$ 和 $a{p_{i,l_i}}$ 是 $k$ 的倍数。
另外,$1\sim n$ 中每个数在 $p$ 中出现且仅出现一次。

样例 1

input

0
6 2
2 4 1 3 6 8

output

Yes
2
2 1 5
4 2 3 4 6

划分为 ${2, 6}$ 和 ${4, 1, 3, 8}$ 两个子序列满足条件。

样例 2

input

0
6 2
2 4 6 1 3 5

output

No

以 $k$ 的倍数结尾什么的最讨厌了 (– ‸– )

样例 3

input

0
6 2
2 1 2 2 1 2

output

Yes
2
4 1 2 5 6
2 3 4

样例 4

input

0
15 3
3 1 1 1 1 3 3 1 3 3 1 1 1 1 3

output

Yes
3
6 1 2 3 4 5 10
6 6 11 12 13 14 15
3 7 8 9

请从页面上方的附加文件中下载。

数据范围与提示

对于所有数据,有 $2 \leq k,n \leq 10^6,0\le a_i\le 10^6$。

Subtask # 分值 $n$ 的限制 $k$ 的限制 特殊限制
1 $5$ $n \le 10$ $k = 2$ -
2 $10$ $n \le 20$ $k \le 20$ -
3 $10$ $n \le 5\times 10^4$ $k = 2$ -
4 $15$ $n \le 10^2$ $k \le 3$ -
5 $10$ $n \le 10^3$ $k \le 10^3$ -
6 $10$ $n \le 5\times 10^4$ $k \le 5\times 10^4$ $a_1,a_2,\cdots ,a_k$ 是 $k$ 的倍数
7 $10$ $n \le 5\times 10^4$ $k \le 5\times 10^4$ 存在方案使得 $a_1$ 和 $a_n$ 属于同一子序列
8 $15$ $n \le 5\times 10^4$ $k \le 5\times 10^4$ -
9 $15$ $n \le 10^6$ $k \le 10^6$ -