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 翻译