#loj542. 「LibreOJ NOIP Round #1」序列划分
「LibreOJ NOIP Round #1」序列划分
#542. 「LibreOJ NOIP Round #1」序列划分
标签: 传统 | 时间限制: 1000 ms | 内存限制: 512 MiB |
题目描述
梦想从几时开始,命运在何处终结?
有一个长度为 的整数序列 。
你的任务是判断是否可以将其划分为 的倍数个非空子序列,使得每个元素在恰一个子序列中出现,同时每个子序列均以 的倍数开头、 的倍数结尾,并且长度也为 的倍数。若能划分,求出任意一个方案。
说明:序列 的一个子序列是指将任意多个(可以为 个)元素删除后,将其他元素按照原序列中的顺序拼接而成的序列。例如,序列 、序列 和序列 均为序列 的子序列,但 不是。
输入格式
输入的第一行包含一个整数 —— 表示子任务编号(与「数据范围与提示」中编号相同,样例的子任务编号为 )。
第二行包含两个空格分隔的正整数 —— 序列 的长度和 的值。
第三行包含 个空格分隔的正整数 —— 依次表示序列 的元素。
输出格式
若有解,则第一行输出 Yes,否则第一行输出 No。
若有解则按以下格式输出任意一个划分方案:
第二行输出一个整数 表示划分成了 个子序列,满足 且 是 的倍数;
接下来 行每行描述一个子序列:
第 行第一个整数 表示第 个子序列的长度,满足 且 是 的倍数。
接下来 个整数 表示这个子序列中元素的下标。满足 (即下标单调递增)且 和 是 的倍数。
另外, 中每个数在 中出现且仅出现一次。
样例 1
输入
0
6 2
2 4 1 3 6 8
输出
Yes
2
2 1 5
4 2 3 4 6
划分为 和 两个子序列满足条件。
样例 2
输入
0
6 2
2 4 6 1 3 5
输出
No
以 的倍数结尾什么的最讨厌了 (– ‸– )
样例 3
输入
0
6 2
2 1 2 2 1 2
输出
Yes
2
4 1 2 5 6
2 3 4
样例 4
输入
0
15 3
3 1 1 1 1 3 3 1 3 3 1 1 1 1 3
输出
Yes
3
6 1 2 3 4 5 10
6 6 11 12 13 14 15
3 7 8 9
请从页面上方的附加文件中下载。
数据范围与提示
对于所有数据,有 。
| Subtask # | 分值 | 的限制 | 的限制 | 特殊限制 |
|---|---|---|---|---|
| 1 | - | |||
| 2 | ||||
| 3 | ||||
| 4 | ||||
| 5 | ||||
| 6 | 是 的倍数 | |||
| 7 | 存在方案使得 和 属于同一子序列 | |||
| 8 | - | |||
| 9 |