CF2001B.Generate Permutation

入门

通过率:0%

AC君温馨提醒

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

题目描述

有一个长度为 nn 的整数序列 aa,其中每个元素初始为 −1-1。

Misuki 有两台打字机,第一台从左到右写字,指针初始指向 11;第二台从右到左写字,指针初始指向 nn。

Misuki 会选择其中一台打字机,并使用它执行以下操作,直到 aa 变成 [1,2,…,n][1, 2, \ldots, n] 的一个排列:

  • 写数字:将当前数组 aa 中未出现的最小正整数写入 aia_i,其中 ii 是指针当前指向的位置。只有当 ai=−1a_i = -1 时才能进行此操作。
  • 回车:将指针返回到初始位置(即第一台打字机返回到 11,第二台打字机返回到 nn)。
  • 移动指针:将指针移动到下一个位置。设指针当前指向 ii,若使用第一台打字机,则 i:=i+1i := i + 1,否则 i:=i−1i := i - 1。只有当操作后 1≤i≤n1 \le i \le n 时才能进行此操作。

你的任务是构造一个长度为 nn 的排列 pp,使得无论 Misuki 使用哪一台打字机,将 aa 变为 pp 所需的最小回车操作次数都相同。如果无法做到,输出 −1-1。

如果有多个满足条件的排列,可以输出任意一个。

输入格式

每个测试点包含多组测试数据。输入的第一行为一个整数 tt(1≤t≤5001 \le t \le 500),表示测试数据组数。

每组测试数据的第一行为一个整数 nn(1≤n≤2×1051 \le n \le 2 \times 10^5),表示排列的长度。

保证所有测试数据中 nn 的总和不超过 2×1052 \times 10^5。

输出格式

对于每组测试数据,输出一行 nn 个整数,表示长度为 nn 的排列 pp,使得无论 Misuki 使用哪台打字机,将 aa 变为 pp 所需的最小回车次数都相同。如果不存在这样的排列,输出 −1-1。

如果有多个满足条件的排列,可以输出任意一个。

输入输出样例

  • 输入#1

    3
    1
    2
    3

    输出#1

    1
    -1
    3 1 2

说明/提示

在第一个测试点,可以通过 00 次回车操作将 a=p=[1]a = p = [1]。

在第二个测试点,可以通过如下方式将 a=p=[1,2]a = p = [1, 2]:

如果 Misuki 使用第一台打字机:

  • 写数字:将 11 写入 a1a_1,aa 变为 [1,−1][1, -1]。
  • 移动指针:指针移动到下一个位置(即 22)。
  • 写数字:将 22 写入 a2a_2,aa 变为 [1,2][1, 2]。

如果 Misuki 使用第二台打字机:

  • 移动指针:指针移动到下一个位置(即 11)。
  • 写数字:将 11 写入 a1a_1,aa 变为 [1,−1][1, -1]。
  • 回车:指针返回到 22。
  • 写数字:将 22 写入 a2a_2,aa 变为 [1,2][1, 2]。

可以证明,使用第一台打字机时最小回车次数为 00,使用第二台打字机时为 11,因此该排列不合法。

同理,p=[2,1]p = [2, 1] 也不合法,所以 n=2n = 2 时无解。

在第三个测试点,可以通过 11 次回车操作将 a=p=[3,1,2]a = p = [3, 1, 2],且两台打字机都需要 11 次回车。可以证明,对于两台打字机,都无法通过 00 次回车写出 pp。

使用第一台打字机的操作如下:

  • 移动指针:指针移动到下一个位置(即 22)。
  • 写数字:将 11 写入 a2a_2,aa 变为 [−1,1,−1][-1, 1, -1]。
  • 移动指针:指针移动到下一个位置(即 33)。
  • 写数字:将 22 写入 a3a_3,aa 变为 [−1,1,2][-1, 1, 2]。
  • 回车:指针返回到 11。
  • 写数字:将 33 写入 a1a_1,aa 变为 [3,1,2][3, 1, 2]。

使用第二台打字机的操作如下:

  • 移动指针:指针移动到下一个位置(即 22)。
  • 写数字:将 11 写入 a2a_2,aa 变为 [−1,1,−1][-1, 1, -1]。
  • 回车:指针返回到 33。
  • 写数字:将 22 写入 a3a_3,aa 变为 [−1,1,2][-1, 1, 2]。
  • 移动指针:指针移动到下一个位置(即 22)。
  • 移动指针:指针移动到下一个位置(即 11)。
  • 写数字:将 33 写入 a1a_1,aa 变为 [3,1,2][3, 1, 2]。

由 ChatGPT 4.1 翻译

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

首页