您的位置:首页 > 其它

51..分治算法练习:  4378 【Laoguo】循环比赛

2016-03-06 17:40 381 查看
时间限制: 1
s

空间限制: 1000
KB

题目等级
: 黄金
Gold

题解

查看运行结果

题目描述 Description

设有n个选手进行循环比赛,其中n=2的m次方,要求每名选手要与其他n-1名选手都赛一次,每名选手每天比赛一次,循环赛共进行n-1天,要求每天没有选手轮空。空。

输入描述 Input
Description


输入1个整数m。

输出描述 Output
Description


输出表格形式的比赛安排表。

样例输入 Sample
Input


3

样例输出 Sample
Output


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

数据范围及提示 Data
Size & Hint


1<=m<=8。

代码:

#include

using namespace std;

#include

#include

int n,m,p[260][260];

void f(int l)

{

if(l==1)return;

else f(l/2);//

for(int i=1;i<=l/2;++i)

for(int j=1;j<=l/2;++j)

{

p[i+l/2][j]=p[i][j]+l/2;

p[i][j+l/2]=p[i][j]+l/2;

p[i+l/2][j+l/2]=p[i][j];

}

}

int main()

{

cin>>m;

n=pow(2,m);//bianchang

p[1][1]=1;

if(m==0)

{

return 0;//坑爹数据有一个m是0,应该没有输出才是

}

f(n);

for(int i=1;i<=n;++i)

{

for(int
j=1;j<=n;++j)

printf("%d
",p[i][j]);

printf("\n");

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: