平台跳跃(jump)
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
读写要求
本题采用文件读写,请在提交代码时使用正确的文件读写方式,否则会导致 RE
输入:jump.in
输出:jump.out
题目描述
有一条河,宽度为 。河的左岸是单元格 ,右岸是单元格 (更准确地说,河流可以用从 到 编号的 个单元格组成的序列表示)。河上还有 个木制平台,第 个平台的长度为 (即第 个平台占据河流中 个连续的单元格)。题目保证所有平台的长度总和不超过 。
你站在 号位置,想要以某种方式到达 号位置。如果你站在位置 ,你可以跳到范围 内的任何位置。然而,你并不喜欢水,所以你只能跳到属于某个木制平台的单元格上。例如,如果 ,你只能跳到下一个位置(前提是它属于木制平台)。你可以理解为单元格 和 始终属于木制平台。
你想知道,如果你可以任意次数(可能为零次)向左或向右移动任何平台,只要它们不相互重叠(但两个平台可以相互接触),是否能够从 到达 。这也意味着你不能改变平台的相对顺序。
请注意,你应该在开始跳跃之前移动好平台(换句话说,先移动平台,然后再开始跳跃)。
例如,如果 且 ,那么从 到达 的一种方法如下:
第一个示例:。
输入格式
输入的第一行包含三个整数 和 () —— 分别代表河流的宽度、平台的数量和你跳跃的最大距离。
输入的第二行包含 个整数 (),其中 是第 个平台的长度。
输出格式
如果无法从 到达 ,在第一行输出 NO。
否则,在第一行输出 YES,并在第二行输出一个长度为 的数组 —— 河流单元格的序列(不包括单元格 和单元格 )。如果有多种可行的方案,任意输出其中一种即可。
如果单元格 不属于任何平台, 应为 。否则, 应等于该单元格所属平台的编号(从 开始计数,平台按照输入顺序从 到 编号)。
请注意,所有等于 的 应形成数组 中长度为 的连续子段,所有等于 的 应形成长度为 的连续子段,……,所有等于 的 应形成长度为 的连续子段。 中 的最左侧位置应大于 的最右侧位置, 的最左侧位置应大于 的最右侧位置,……, 的最左侧位置应大于 的最右侧位置。
详见示例输出以更好地理解。
输入输出样例
7 3 2
1 2 1
YES
0 1 0 2 2 0 3
10 1 11
1
YES
0 0 0 0 0 0 0 0 0 1
10 1 5
2
YES
0 0 0 0 1 1 0 0 0 0
说明/提示
考虑第一个示例:答案是 。你执行的跳跃序列是 $0 \rightarrow 2 \rightarrow 4 \rightarrow 5 \rightarrow 7 \rightarrow 8$。
考虑第二个示例:如何放置平台并不重要,因为你总能从 直接跳到 。
考虑第三个示例:答案是 。你执行的跳跃序列是 。