AT_arc144_c.[ARC144C] K Derangement

提高+/省选-

通过率:0%

AC君温馨提醒

该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

给定正整数 N, KN,\ K。请你从 11 到 NN 的整数中构造一个排列 A=(A1,A2,…,AN)A = (A_1, A_2, \ldots, A_N),使其满足以下条件,并输出字典序最小的一个。

  • 对于任意 ii(1≤i≤N1 \leq i \leq N),都有 ∣Ai−i∣≥K|A_i - i| \geq K。

如果不存在满足条件的排列,请输出 -1。

什么是数列的字典序?
判断两个不同数列 SS 和 TT 的大小的方法如下:

记 SS 的第 ii 个元素为 SiS_i。若 SS 字典序小于 TT,记作 S<TS < T,大于则记作 S>TS > T。

  1. 取 SS 和 TT 中较短的那个数列的长度为 LL,依次比较 i=1,2,…,Li=1,2,\dots,L 时 SiS_i 和 TiT_i 是否相等。
  2. 如果存在 Si≠TiS_i \neq T_i 的 ii,取最小的这样的 ii 为 jj,比较 SjS_j 和 TjT_j,若 Sj<TjS_j < T_j,则 S<TS < T,否则 S>TS > T,算法结束。
  3. 如果所有 ii 都有 Si=TiS_i = T_i,则比较 SS 和 TT 的长度,若 SS 更短,则 S<TS < T,否则 S>TS > T,算法结束。

输入格式

输入为一行,包含两个整数:

NN KK

输出格式

输出满足条件的排列 AA 中字典序最小的一个,格式如下:

A1A_1 A2A_2 …\ldots ANA_N

如果不存在这样的排列,输出 -1。

输入输出样例

  • 输入#1

    3 1

    输出#1

    2 3 1
  • 输入#2

    8 3

    输出#2

    4 5 6 7 8 1 2 3
  • 输入#3

    8 6

    输出#3

    -1

说明/提示

数据范围

  • 2≤N≤3×1052 \leq N \leq 3 \times 10^5
  • 1≤K≤N−11 \leq K \leq N - 1

样例解释 1

满足条件的排列有 (2,3,1)(2, 3, 1) 和 (3,1,2)(3, 1, 2) 两个。例如 (2,3,1)(2, 3, 1) 满足:

  • ∣A1−1∣=1≥K|A_1 - 1| = 1 \geq K
  • ∣A2−2∣=1≥K|A_2 - 2| = 1 \geq K
  • ∣A3−3∣=2≥K|A_3 - 3| = 2 \geq K

因此满足条件。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页