1600*G. Special Permutation(构造&找规律)

1600*G. Special Permutation(构造&找规律)_第1张图片

1600*G. Special Permutation(构造&找规律)_第2张图片 解析:

        要求每两个数之间的差为2或3或4,首先想到分奇偶

        但是奇偶两端的差太大,所以可以将一个反转,即将两端小的拼在中间。

        但是 1、2之间为1,所以可以反转一下2,4

        n小于3,不符题意 输出-1

        即 7 5 3 1   4 2 6这样子,交换4和2即可

#include
using namespace std;
#define int long long
const int N=1e5+5;
int t,n,a[N]; 
signed main(){
	scanf("%lld",&t);
	while(t--){
		scanf("%lld",&n);
		if(n<=3) puts("-1");
		else{
			if(n%2){
				for(int i=n;i>0;i-=2) printf("%d ",i);
				printf("%d %d ",4,2);
				for(int i=6;i<=n;i+=2) printf("%d ",i);
			}
			else{
				for(int i=n-1;i>0;i-=2) printf("%d ",i);
				printf("%d %d ",4,2);
				for(int i=6;i<=n;i+=2) printf("%d ",i);
			}
			puts("");
		}
	}
	return 0;
}

你可能感兴趣的:(codeforces,算法,c语言,c++,开发语言,数据结构)