当前位置: 首页 > 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;}
    } 

http://www.xdnf.cn/news/787051.html

相关文章:

  • 编译器对齐机制与硬件浮点计算详解
  • 春雪食品×MTC AI助手:创新驱动再升级,效率革命正当时!
  • PV操作的C++代码示例讲解
  • .Net Framework 4/C# 初识 C#
  • LeetCode 300 最长递增子序列
  • 电工基础【5】简单的电路设计接线实操
  • SpringCloud——Nacos注册中心、OpenFeign
  • 前端验证下跨域问题(npm验证)
  • DeepSeek 赋能 NFT:数字艺术创作与交易的革新密码
  • 数据库完整性
  • 18.04 update 报错:(appstreamcli:2822): GLib-ERROR
  • 《Effective Python》第六章 推导式和生成器——使用类替代生成器的 `throw` 方法管理迭代状态转换
  • 提升系统稳定性和可靠性的特殊线程(看门狗线程)
  • Electron桌面应用下,在拍照、展示pdf等模块时,容易导致应用白屏
  • DiskGenius专业版v6.0.1.1645:分区管理、数据恢复、备份还原,一应俱全!
  • PHP+mysql 美容美发预约小程序源码 支持DIY装修+完整图文搭建教程
  • Vue3中使用Echarts图表步骤-demo
  • 安科瑞APD300:多模态融合的智能局放监测新标杆
  • PowerShell脚本编程基础指南
  • 01-python爬虫-第一个爬虫程序
  • Docker容器使用手册
  • AXURE安装+汉化-Windows
  • Ubuntu中TFTP服务器安装使用
  • 5.Transformer模型详解
  • SKUA-GOCAD入门教程-第八节 线的创建与编辑2
  • 后端解决跨域问题的三种方案:注解配置 vs 全局配置 vs 过滤器配置(附完整代码详解)
  • Spring 官方推荐构造函数注入
  • 通过阿里云 DashScope API 调用通义千问
  • Vue插槽
  • 基于RGB-D图像的避障检测算法开发(Python实现)