码迷,mamicode.com
首页 > 其他好文 > 详细

codeforces #303A Lucky Permutation Triple 构造

时间:2015-05-18 14:48:07      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:codeforces   构造   

题目大意:给定n,要求构造三个0~n?1的排列A,B,C,使得对于任意i(i[0,n?1])满足Ai+BiCi(mod n)
首先我们来考虑n是奇数的情况。以n=7为例
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每次+1,排列B每次?2,排列C每次?1
由于n是奇数,这样可以保证A,B,C三个排列都不重复
那么n是偶数的时候怎么构造呢?n是偶数的时候无解!
为什么呢?我们可以计算一下三个排列的和!
显然每个排列的和都是n(n?1)2
那么sumA+sumB=n(n?1),sumC=n(n?1)2
n为偶数时这两个数显然关于n不同余,故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;
}

codeforces #303A Lucky Permutation Triple 构造

标签:codeforces   构造   

原文地址:http://blog.csdn.net/popoqqq/article/details/45820611

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!