#P1002. [2024 校赛] 欢迎加入实验室

    ID: 117 传统题 1000ms 256MiB 尝试: 5 已通过: 1 难度: 10 上传者: 标签>贪心比赛/考试校程序设计竞赛年份2024比赛

[2024 校赛] 欢迎加入实验室

题目描述

本题题解已发表至 讨论区

计通楼即将举办一场激烈的编程竞赛,来选拔进入实验室的优秀学生。为了保证选手的公平性和参赛体验,实验室的学长学姐们决定对座位安排进行特殊设计:

每位参赛选手都有一个报名编号,从 11NN,并且教室内也恰好准备 NN 个座位,编号同样从 11NN。为了防止选手与熟悉的人相邻,座位编号 AiA_i 必须与其报名编号 ii 的距离至少为 KK,即 AiiK\lvert A_i - i\rvert \geq K

我们希望找到一种满足条件的座次安排,同时要求编号排列尽可能靠前(即字典序最小)。如果无法安排满足条件的座位,请输出 -1,以表示本次竞赛的座次安排无法完成。

作为参赛选手,你需要完成这个挑战,帮助解决座次安排问题,确保每一位选手都能公平地入座。


什么是序列的字典序?

以下是判断不同序列 SSTT 之间字典序的算法。

下面,设 SiS_i 表示 SS 的第 ii 个元素。如果 SS 在字典序上小于 TT,我们用 S<TS \lt T 表示这种关系;如果 SS 在字典序上大于 TT,我们用 S>TS \gt T 表示这种关系。

1. 设 LLSSTT 长度中的较小值。对于每个 i=1,2,,Li=1,2,\dots,L,检查 SiS_iTiT_i 是否相同。
2. 如果存在某个 ii 使得 SiTiS_i \neq T_i,设 jj 为最小的这样的 ii。然后,我们比较 SjS_jTjT_j。如果 SjS_j 小于 TjT_j(按数值比较),则确定 S<TS \lt T 并退出;如果 SjS_j 大于 TjT_j,则确定 S>TS \gt T 并退出。
3. 如果没有 ii 使得 SiTiS_i \neq T_i,则比较 SSTT 的长度。如果 SSTT 短,则确定 S<TS \lt T 并退出;如果 SSTT 长,则确定 S>TS \gt T 并退出。

输入描述

  • 2N3×1052\leq N\leq 3\times 10^5

  • 1KN11\leq K\leq N - 1

输出描述

打印满足条件的从 11NN 的整数的字典序最小排列 A=(A1,A2,,AN)A = (A_1, A_2, \ldots, A_N),格式如下:

A1A_1 A2A_2 \ldots ANA_N

如果没有满足条件的排列,打印 1-1

示例 1

输入

3 1

输出

2 3 1

说明

两个排列满足条件:(2,3,1)(2, 3, 1)(3,1,2)(3, 1, 2)。以 (2,3,1)(2, 3, 1) 为例,以下条件成立:

- A11=1K\lvert A_1 - 1\rvert = 1 \geq K
- A22=1K\lvert A_2 - 2\rvert = 1 \geq K
- A33=2K\lvert A_3 - 3\rvert = 2 \geq K

示例 2

输入

8 3

输出

4 5 6 7 8 1 2 3