Description
给出一正整数n,构造三个
Input
一个正整数n
Output
如果存在合法的三个排列a,b,c则输出任意一组解,否则输出−1
Sample Input
5
Sample Output
1 4 3 2 0
1 0 2 4 3
2 4 0 1 3
Solution
如果n是偶数,由于一个排列的和为
如果n是奇数,不妨设
令bi=ci−ai=i−(n−i−1)=2∗i+1 mod n,下证b是一个
对于i≠j ,不妨设i<j
1.若2∗j<n,则2∗i≢2∗j mod n
2.若2∗i≥n,由于2∗(j−i)≢0 mod n(n为奇数),故
3.若2∗i<n≤2∗j,由于2∗i是偶数,2∗j mod n是奇数,故2∗i≢2∗j mod n
故2∗i≢2∗j mod n,∀0≤i<j<n,进而2∗i+1≢2∗j+1 mod n,即bi≢bj,b是一个排列
Code
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<ctime>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
int main()
{
int n;
while(~scanf("%d",&n))
{
if(n%2==0)printf("-1\n");
else
{
for(int i=n-1;i>=0;i--)printf("%d%c",i,i==0?'\n':' ');
for(int i=0;i<n;i++)printf("%d%c",(i-(n-i-1)+n)%n,i==n-1?'\n':' ');
for(int i=0;i<n;i++)printf("%d%c",i,i==n-1?'\n':' ');
}
}
return 0;
}