Advertisement

2018年ACM-ICPC青岛区域赛 F题 Tournament

阅读量:

题目链接-浙大oj

题目
题目

题意

思路: 基于异或运算的特点, 将数值0,1,2,3分别与自身进行异或运算, 能够得到这四个数值各自对应的四种不同排列组合. (具体原理我也母鸡\rightarrow\_-) 计算时采用最低位1的位置来确定最大分配轮数k = n \& (-n), 比如当n =4时结果为4; 当n =6时结果为2; 当n =8时结果也为8. 在每一轮交换对手的过程中,默认是以两个一组来进行操作.

复制代码
    #include <iostream>
    #include <cstdio>
    
    using namespace std;
    int n,m,k;
    int main()
    {
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d%d",&n,&m);
        if(m>=(n&(-n)))
        {
            puts("Impossible");
            continue;
        }
        for(int j=1; j<=m; j++)
        {
            for(int i=0; i<n; i++)
            {
                printf("%d%c",(i^j)+1,i==n-1?'\n':' ');
            }
        }
    }
    return 0;
    }

全部评论 (0)

还没有任何评论哟~