当前位置: 首页 > news >正文

Generate Permutation

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

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

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

  • 写数字:将数组 aa 中不存在的最小 正整数 写入元素 aiai​,ii 是指针指向的位置。此操作只能在 ai=−1ai​=−1 时执行。
  • 回车:将指针返回到其初始位置(即第一台打字机为 11,第二台为 nn)
  • 移动指针:将指针移动到下一个位置,设 ii 为此操作前指针指向的位置,如果 Misuki 使用第一台打字机,则会发生 i:=i+1i:=i+1,否则发生 i:=i−1i:=i−1。此操作只能在操作后 1≤i≤n1≤i≤n 成立时执行。

你的任务是构造任意长度为 nn 的排列 pp,使得无论 Misuki 使用哪台打字机,所需的最小回车操作次数使 a=pa=p 的结果相同。

输入

每个测试包含多个测试用例。输入的第一行包含一个整数 tt (1≤t≤5001≤t≤500) — 测试用例的数量。测试用例的描述如下。

每个测试用例的第一行包含一个整数 nn (1≤n≤2⋅1051≤n≤2⋅105) — 排列的长度。

保证所有测试用例中 nn 的总和不超过 2⋅1052⋅105。

输出

对于每个测试用例,输出一行 nn 个整数,表示长度为 nn 的排列 pp,使得无论 Misuki 使用哪台打字机,所需的最小回车操作次数使 a=pa=p 的结果相同,或者如果无法做到则输出 −1−1。

如果有多个有效的排列,你可以输出其中任何一个。

示例

InputcopyOutputcopy
3
1
2
3
1
-1
3 1 2

注意

在第一个测试用例中,可以使用 00 次回车操作使 a=p=[1]a=p=[1] 成为可能。

在第二个测试用例中,可以如下所示以最小的回车次数使 a=p=[1,2]a=p=[1,2] 成为可能:

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

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

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

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

可以证明,使用第一台打字机将 aa 转换为 pp 所需的最小回车次数为 00,而使用第二台打字机时为 11,因此这个排列是无效的。

同样,p=[2,1]p=[2,1] 也是无效的,因此 n=2n=2 没有解决方案。

在第三个测试用例中,可以用 11 次回车操作使 a=p=[3,1,2]a=p=[3,1,2] 在第一台和第二台打字机上都成为可能。可以证明,对于两台打字机,使用 00 次回车无法写出 pp。

使用第一台打字机可以:

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

使用第二台打字机可以:

  • 移动指针:将指针移动到下一个位置。(即 22)
  • 写数字:将 11 写入 a2a2​,aa 变为 [−1,1,−1][−1,1,−1]
  • 回车:将指针返回到 33。
  • 写数字:将 22 写入 a3a3​,aa 变为 [−1,1,2][−1,1,2]
  • 移动指针:将指针移动到下一个位置。(即 22)
  • 移动指针:将指针移动到下一个位置。(即 11)
  • 写数字:将 33 写入 a1a1​,aa 变为 [3,1,2][3,1,2]
    //找规律,总数为奇数可以偶数不可以
    #include<bits/stdc++.h>
    using namespace std;
    map<int,int>mapp;
    int main(){int t;cin>>t;while(t--){int n;cin>>n;if(n==1){cout<<1<<endl;continue;}if(n%2==0){cout<<-1<<endl;continue;}else{int h=1;int num=n;int y=0;int u=n/2;int f=1;while(num!=(n-1)){if(f<=u){f++;cout<<num<<" ";num-=2;}else{cout<<num<<" ";if(y==0){num++;y=1;}else	num+=2;}}}cout<<n-1<<" ";cout<<endl;}
    } 

相关文章:

  • ALLEN BRADLEY特价型号1715-OB8DE 模块
  • Make All Equal
  • 灵活运用 NextJS 服务端组件与客户端组件
  • 远程终端登录和桌面访问(嵌入式开发)
  • 网络安全基础--第十天
  • 第十一章 注解
  • 【文献精读】Explaining grokking through circuit efficiency
  • 传输层协议:网络通信的关键纽带
  • Matlab自学笔记五十七:符号运算、可变精度运算、双精度浮点型运算,三种运算精度的概念、比较、选择和应用
  • 主线程极致优化:让CPU“零闲置“的实战方案
  • 制作一款打飞机游戏64:关卡设计
  • 推荐算法八股
  • LVS负载均衡
  • Java复习Day26
  • 线程相关面试题
  • JSCH使用SFTP详细教程
  • 【小红书】API接口,获取笔记列表
  • H.264编码
  • 深拷贝与浅拷贝的区别?如何手写实现一个深拷贝?
  • 基于51单片机和8X8点阵屏、独立按键的填充消除类小游戏
  • 陕西省工程建设交易服务中心网站/千锋教育出来好找工作吗
  • 专做温州鞋批发的网站/网站访问量
  • 网站打不开是怎么回事/百度快照在哪里
  • it前端是做网站的/安阳企业网站优化外包
  • mockpuls可以做网站吗/公司推广网站
  • 门户网站做商城的/免费注册二级域名的网站