2908: 【例65.1】 循环比赛

内存限制:64 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:5 解决:3

题目描述

设有$N$个选手进行循环比赛,其中$N=2^M$,要求每名选手要与其他$N−1$名选手都赛一次,每名选手每天比赛一次,循环赛共进行$N−1$天,要求每天没有选手轮空。

输入

输入:$M$

输出

输出:表格形式的比赛安排表。一行各数据间用一个空格隔开。

样例输入 复制

3

样例输出 复制

1 2 3 4 5 6 7 8
2 1 4 3 6 5 8 7
3 4 1 2 7 8 5 6
4 3 2 1 8 7 6 5
5 6 7 8 1 2 3 4
6 5 8 7 2 1 4 3
7 8 5 6 3 4 1 2
8 7 6 5 4 3 2 1

提示

#include<bits/stdc++.h>
using namespace std;
int n;
int a[1005][1005];
void deal(int x){
    if(x==2){
        a[1][1]=1;
        a[1][2]=2;
        a[2][1]=2;
        a[2][2]=1;
        return;
    }
    deal(x/2);
    for(int i=1;i<=x/2;i++){
        for(int j=1;j<=x/2;j++){
            a[i+x/2][j]=a[i][j]+x/2;
            a[i][j+x/2]=a[i][j]+x/2;
            a[i+x/2][j+x/2]=a[i][j];
        }
    }
}
int main(){
    cin>>n;
    n=(1<<n);
    deal(n);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cout<<a[i][j]<<" ";
        }
        cout<<endl;
    }
    return 0;
}