AT_arc144_c [ARC144C] K Derangement

题目描述

给定正整数 $N,\ K$。请你从 $1$ 到 $N$ 的整数中构造一个排列 $A = (A_1, A_2, \ldots, A_N)$,使其满足以下条件,并输出字典序最小的一个。 - 对于任意 $i$($1 \leq i \leq N$),都有 $|A_i - i| \geq K$。 如果不存在满足条件的排列,请输出 `-1`。 **什么是数列的字典序?** 判断两个不同数列 $S$ 和 $T$ 的大小的方法如下: 记 $S$ 的第 $i$ 个元素为 $S_i$。若 $S$ 字典序小于 $T$,记作 $S < T$,大于则记作 $S > T$。 1. 取 $S$ 和 $T$ 中较短的那个数列的长度为 $L$,依次比较 $i=1,2,\dots,L$ 时 $S_i$ 和 $T_i$ 是否相等。 2. 如果存在 $S_i \neq T_i$ 的 $i$,取最小的这样的 $i$ 为 $j$,比较 $S_j$ 和 $T_j$,若 $S_j < T_j$,则 $S < T$,否则 $S > T$,算法结束。 3. 如果所有 $i$ 都有 $S_i = T_i$,则比较 $S$ 和 $T$ 的长度,若 $S$ 更短,则 $S < T$,否则 $S > T$,算法结束。

输入格式

输入为一行,包含两个整数: > $N$ $K$

输出格式

输出满足条件的排列 $A$ 中字典序最小的一个,格式如下: > $A_1$ $A_2$ $\ldots$ $A_N$ 如果不存在这样的排列,输出 `-1`。

说明/提示

### 数据范围 - $2 \leq N \leq 3 \times 10^5$ - $1 \leq K \leq N - 1$ ### 样例解释 1 满足条件的排列有 $(2, 3, 1)$ 和 $(3, 1, 2)$ 两个。例如 $(2, 3, 1)$ 满足: - $|A_1 - 1| = 1 \geq K$ - $|A_2 - 2| = 1 \geq K$ - $|A_3 - 3| = 2 \geq K$ 因此满足条件。 由 ChatGPT 4.1 翻译