题目名称 | 4166. 遵循指令之意 |
---|---|
输入输出 | sort.in/out |
难度等级 | ★☆ |
时间限制 | 1000 ms (1 s) |
内存限制 | 512 MiB |
测试数据 | 10 |
题目来源 |
|
开放分组 | 全部用户 |
提交状态 | |
分类标签 | |
分享题解 |
通过:21, 提交:48, 通过率:43.75% | ||||
|
100 | 1.345 s | 6.17 MiB | C++ |
|
100 | 1.474 s | 6.77 MiB | C++ |
|
100 | 1.476 s | 12.17 MiB | C++ |
|
100 | 1.582 s | 8.41 MiB | C++ |
|
100 | 1.585 s | 9.24 MiB | C++ |
|
100 | 1.603 s | 21.36 MiB | C++ |
|
100 | 1.617 s | 10.62 MiB | C++ |
|
100 | 1.620 s | 12.87 MiB | C++ |
|
100 | 1.677 s | 8.32 MiB | C++ |
|
100 | 1.736 s | 16.06 MiB | C++ |
本题关联比赛 | |||
集训 |
关于 遵循指令之意 的近10条评论(全部评论) |
---|
n 个食指传令官构成一个传令系统,第 i 个传令官的级别为 ai,ai 越低代表传令官级别越高,a 为 1 到 n 的排列。
可以对传令系统进行调整,调整方案为:选择一个下标 i(1 <= i <= n - 3),然后分别调换 ai 和 a(i + 2),a(i + 1) 和 a(i + 3)。
传令官需要对指令进行解读,因此靠前的传令官级别应该尽量高。
你需要对传令系统进行任意次调整,使得 a 的字典序最小。
形式化题意:
给定一个长度为 n 的排列,每次操作可以选定一个 [1, n - 3] 的下标 i,交换 ai, a(i +2), 然后交换 a(i + 1), a(i + 3)
求任意次操作以后能得到的最小的字典序 a。
第一行一个整数 n 表示 n 个传令官
接下来一行 n 个数为 a1~an,a1~an 构成一个排列。
输出任意次操作后字典序最小的 a。
4 3 4 1 2
1 2 3 4
5 5 4 3 1 2
2 1 3 4 5
第一个样例中,选择下标 1 进行一次调整。
第二个样例中,先选择下标 2 进行调整变成 5 1 2 4 3
再选择下标 1 进行调整,变成 2 4 5 1 3
再选择下标 2 进行调整,变成 2 1 3 4 5
对于 10% 的数据 保证奇数位置形成的序列和偶数位置形成的序列逆序对个数奇偶性不同, n <= 10
对于 60% 的数据 n <= 5000
对于 100% 的数据 n <= 1000000
CodeForces (Problem - 2101B - Codeforces,题面有修改)