B. 平台跳跃(jump)

    传统题 文件IO:jump 1000ms 256MiB

平台跳跃(jump)

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

读写要求

本题采用文件读写,请在提交代码时使用正确的文件读写方式,否则会导致 RE

输入:jump.in

输出:jump.out

题目描述

有一条河,宽度为 nn。河的左岸是单元格 00,右岸是单元格 n+1n+1(更准确地说,河流可以用从 00n+1n+1 编号的 n+2n+2 个单元格组成的序列表示)。河上还有 mm 个木制平台,第 ii 个平台的长度为 cic_i(即第 ii 个平台占据河流中 cic_i 个连续的单元格)。题目保证所有平台的长度总和不超过 nn

你站在 00 号位置,想要以某种方式到达 n+1n+1 号位置。如果你站在位置 xx,你可以跳到范围 [x+1;x+d][x + 1; x + d] 内的任何位置。然而,你并不喜欢水,所以你只能跳到属于某个木制平台的单元格上。例如,如果 d=1d=1,你只能跳到下一个位置(前提是它属于木制平台)。你可以理解为单元格 00n+1n+1 始终属于木制平台

你想知道,如果你可以任意次数(可能为零次)向左或向右移动任何平台,只要它们不相互重叠(但两个平台可以相互接触),是否能够从 00 到达 n+1n+1。这也意味着你不能改变平台的相对顺序。

请注意,你应该在开始跳跃之前移动好平台(换句话说,先移动平台,然后再开始跳跃)。

例如,如果 n=7,m=3,d=2n=7, m=3, d=2c=[1,2,1]c = [1, 2, 1],那么从 00 到达 88 的一种方法如下:

第一个示例:n=7n=7

输入格式

输入的第一行包含三个整数 n,mn, mdd (1n,m,d1000,mn1 \le n, m, d \le 1000, m \le n) —— 分别代表河流的宽度、平台的数量和你跳跃的最大距离。

输入的第二行包含 mm 个整数 c1,c2,,cmc_1, c_2, \dots, c_m (1cin,i=1mcin1 \le c_i \le n, \sum_{i=1}^{m} c_i \le n),其中 cic_i 是第 ii 个平台的长度。

输出格式

如果无法从 00 到达 n+1n+1,在第一行输出 NO

否则,在第一行输出 YES,并在第二行输出一个长度为 nn 的数组 aa —— 河流单元格的序列(不包括单元格 00 和单元格 n+1n+1)。如果有多种可行的方案,任意输出其中一种即可。

如果单元格 ii 不属于任何平台,aia_i 应为 00。否则,aia_i 应等于该单元格所属平台的编号(从 11 开始计数,平台按照输入顺序从 11mm 编号)。

请注意,所有等于 11aia_i 应形成数组 aa 中长度为 c1c_1 的连续子段,所有等于 22aia_i 应形成长度为 c2c_2 的连续子段,……,所有等于 mmaia_i 应形成长度为 cmc_m 的连续子段。aa22 的最左侧位置应大于 11 的最右侧位置,33 的最左侧位置应大于 22 的最右侧位置,……,mm 的最左侧位置应大于 m1m-1 的最右侧位置。

详见示例输出以更好地理解。

输入输出样例

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,1,0,2,2,0,3][0, 1, 0, 2, 2, 0, 3]。你执行的跳跃序列是 $0 \rightarrow 2 \rightarrow 4 \rightarrow 5 \rightarrow 7 \rightarrow 8$。

考虑第二个示例:如何放置平台并不重要,因为你总能从 00 直接跳到 1111

考虑第三个示例:答案是 [0,0,0,0,1,1,0,0,0,0][0, 0, 0, 0, 1, 1, 0, 0, 0, 0]。你执行的跳跃序列是 056110 \rightarrow 5 \rightarrow 6 \rightarrow 11

周赛#1023(div2)复现赛

未参加
状态
已结束
规则
IOI
题目
5
开始于
2026-4-11 20:30
结束于
2026-4-18 12:30
持续时间
1.5 小时
主持人
参赛人数
16