当前位置:首页 > 题解目录 > 正文内容

【题解】循环比赛日程表

亿万年的星光4个月前 (05-30)题解目录222

【题目描述】

设有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


【题目分析】

可以采用分治法来解决这个问题。具体步骤如下:

1.基本情况:当 N=2 时,比赛安排很简单:

第一天:选手 1 对选手 2

第二天:选手 2 对选手 1 (因为循环赛是对称的)

2.递归分解:

对于N=2^M, 可以将问题分解为两个N/2的子问题。

先安排前N/2名选手的比赛日程,然后利用对称性安排后N/2名选手的比赛日程。

最后,将两个子问题的解进行合并,填充剩余的比赛安排。

3.合并步骤:

左上角的子矩阵是前N/2名选手的比赛安排。

右上角的子矩阵是前N/2名选手与后N/2名选手的比赛安排,可以通过左上角矩阵加N/2得到。

左下角的子矩阵是右上角子矩阵的对称。

右下角的子矩阵是左上角矩阵的复制。



【参考答案】

#include <bits/stdc++.h>
using namespace std;
int table[1000][1000];
void schedule(int n) {
	if (n == 1) {
		table[0][0] = 1;
		return;
	}
	int half = n / 2;
	schedule(half); // 递归解决子问题

	// 填充右上角
	for (int i = 0; i < half; ++i) {
		for (int j = 0; j < half; ++j) {
			table[i][j + half] = table[i][j] + half;
		}
	}

	// 填充左下角(对称)
	for (int i = 0; i < half; ++i) {
		for (int j = 0; j < half; ++j) {
			table[i + half][j] = table[i][j + half];
		}
	}

	// 填充右下角(复制左上角)
	for (int i = 0; i < half; ++i) {
		for (int j = 0; j < half; ++j) {
			table[i + half][j + half] = table[i][j];
		}
	}
}

int main() {
	int M;
	cin >> M;
	int N = pow(2, M);
	schedule(N);
	// 输出比赛安排表
	for (int i = 0; i < N; ++i) {
		for (int j = 0; j < N; ++j) {
			cout << table[i][j] << " ";
		}
		cout << endl;
	}

	return 0;
}


扫描二维码推送至手机访问。

版权声明:本文由青少年编程知识记录发布,如需转载请注明出处。

标签: 分治
分享给朋友:

相关文章

【题解】山区建小学

【题目描述】政府在某山区修建了一条道路,恰好穿越总共m个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往。已知任意两个相邻的村庄之间的距离为di(为正整数),其中,0<i<...

学生分组

【题目描述】有N组学生,给出初始时每组中的学生个数,再给出每组学生人数的上界R和下界L(L≤R),每次你可以在某组中选出一个学生把他安排到另外一组中,问最少要多少次才可以使N组学生的人数都在[L,R]...

八皇后2

【题目描述】会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 × 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。对于某个满足要求的8...

【题解】合根植物

【题解】合根植物

【题目描述】w星球的一个种植园,被分成 m * n 个小格子(东西方向m行,南北方向n列)。每个格子里种了一株合根植物。这种植物有个特点,它的根可能会沿着南北或东西方向伸展,从而与另一个格子的植物合成...

【题解】王国比赛

【题解】王国比赛

【题目描述】智慧之王 Kri 统治着一座王国。 这天 Kri 决定举行一场比赛,来检验自己大臣的智慧。 比赛由 n道判断题组成,有 m位大臣参加。现在你已经知道了所有大臣的答题情况,但尚未拿到答...

分数求和

题目描述】输入n个分数并对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为1;若最终结果的分母为1,则直接用整数表示。如: 5/6  、 10/3  均是最简形...