题目大意:给定
n
,要求构造三个
首先我们来考虑
n
是奇数的情况。以
A 0 1 2 3 4 5 6
B 6 4 2 0 5 3 1
C 6 5 4 3 2 1 0
看出来怎么构造的了么?
没错,排列
A
每次
由于
n
是奇数,这样可以保证
那么
n
是偶数的时候怎么构造呢?
为什么呢?我们可以计算一下三个排列的和!
显然每个排列的和都是
n(n−1)2
那么
sumA+sumB=n(n−1),sumC=n(n−1)2
当
n
为偶数时这两个数显然关于
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define M 100100
using namespace std;
int n;
int ans[3][M];
int main()
{
int i,j;
cin>>n;
if(~n&1)
return cout<<-1<<endl,0;
for(i=0;i<n;i++)
{
ans[0][i]=i;
ans[1][i]=((n-1-i)-i+n)%n;
ans[2][i]=n-1-i;
}
for(i=0;i<3;i++)
for(j=0;j<n;j++)
printf("%d%c",ans[i][j],j==n-1?'\n':' ');
return 0;
}