1352G - Special Permutation[构造][思维]
time limit per test | memory limit per test | input | output |
---|---|---|---|
2 seconds | 256 megabytes | standard input | standard output |
Description:
A permutation of length n n n is a n a_n an array p = [ p 1 , p 2 , … , p n ] p=[p_1,p_2,…,p_n] p=[p1,p2,…,pn], which contains every integer from 1 1 1 to n n n (inclusive) and, moreover, each number appears exactly once. For example, p = [ 3 , 1 , 4 , 2 , 5 ] p=[3,1,4,2,5] p=[3,1,4,2,5] is a permutation of length 5 5 5.
For a given number n ( n ≥ 2 ) n (n≥2) n(n≥2), find a permutation p p p in which absolute difference (that is, the absolute value of difference) of any two neighboring (adjacent) elements is between 2 2 2 and 4 4 4, inclusive. Formally, find such permutation p p p that 2 ≤ ∣ p i − p i + 1 ∣ ≤ 4 2≤|p_i−p_i+1|≤4 2≤∣pi−pi+1∣≤4 for each i ( 1 ≤ i < n ) i (1≤i<n) i(1≤i<n).
Print any such permutation for the given integer n n n or determine that it does not exist.
Input
The first line contains an integer t ( 1 ≤ t ≤ 100 ) t (1≤t≤100) t(1≤t≤100) — the number of test cases in the input. Then t t t test cases follow.
Each test case is described by a single line containing a n a_n an integer n ( 2 ≤ n ≤ 1000 ) n (2≤n≤1000) n(2≤n≤1000)
Output
Print t t t lines. Print a permutation that meets the given requirements. If there are several such permutations, then print any of them. If no such permutation exists, print − 1 -1 −1.
Example input
6
10
2
4
6
7
13
Example output
9 6 10 8 4 7 3 1 5 2
-1
3 1 4 2
5 3 6 2 4 1
5 1 3 6 2 4 7
13 9 7 11 8 4 1 3 5 2 6 10 12
分析:
题意:
构造一个长度为
n
n
n 的数列,满足
2
≤
∣
p
[
i
]
−
p
[
i
+
1
]
∣
≤
4
2 \leq |p[i] - p[i+1]| \leq 4
2≤∣p[i]−p[i+1]∣≤4
做法:
这一场都是一些简单的思维,就是最后一题卡了。。
一直没想到怎么写
看了题解感觉自己像个傻子orz
先放奇数,放完后从
4
,
2
,
6
4, 2 ,6
4,2,6 再这样放偶数就好了
Code:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
int T;
scanf("%d", &T);
while(T--) {
int n;
scanf("%d", &n);
if(n <= 3) {
puts("-1");
}else{
for(int i = n; i >= 1; --i)
if(i & 1)
printf("%d ", i);
printf("4 2 ");
for(int i = 6; i <= n; i += 2)
printf("%d ", i);
puts("");
}
}
return 0;
}