有n(n=2k)個運動員要進行網球迴圈賽,alice和bob要為他們設計乙個滿足以下要求的比賽日程表:
每個選手必須與其他n-1個選手各賽一次
每個選手一天只能賽一次
迴圈賽一共進行n-1天
輸入為k
請為他們設計演算法。
樣例輸入:
1樣例輸出
1 22 1
演算法描述:
先初始化乙個兩個選手的比賽日程表;
若輸入選手數為2,則直接輸入初始化的比賽日程表
若輸入選手數大於2,則先將2人比賽日程表中每一項加2得到的新錶值填充到其下方,其則是3、4號選手第1、2天的比賽日程;
將3、4號選手第1、2天的比賽日程填充到1、2號選手第3、4天的比賽日程上;
將1、2號選手第1、2天的比賽日程填充到3、4號選手第3、4天的比賽日程上;
使用迴圈,比賽日程表可以重複進行類似上面操作,使得得到8位、16位、32位選手…的比賽日程表。
注:主要思路是根據初始的2位選手的比賽日程,翻一倍完成4位選手的比賽日程,再翻已被完成8位選手比賽日程…其中每一步的做法也都相同,這也就是可以使用到分治演算法,逐步算出每一步的日賽日程表,得到最終結果。
**如下
#include
#include
using
namespace std;
int k;
int cal[
200]
[200];
intmain()
for(
int i =
1; i <= n; i++
)}
基礎分治演算法題 迴圈比賽日程表
時間限制 1 sec 記憶體限制 128 mb 提交 1 解決 1 提交 狀態 討論版 設有n個選手進行迴圈比賽,其中n 2m,要求每名選手要與其他n 1名選手都賽一次,每名選手每天比賽一次,迴圈賽共進行n 1天,要求每天沒有選手輪空。m 1 m 6 形式的比賽安排表,每個數占3列。31 2 3 4...
迴圈賽日程表(分治)
設有 n 2的k次方 個運動員要進行網球迴圈賽。現要設計乙個滿足以下要求的比賽日程表 1 每個選手必須與其他n 1個選手各自賽一次。2 每個選手一天只能賽一次。3 迴圈賽一共進行n 1天。按分治策略,我們可以將所有的選手分為兩半,n個選手的比賽日程表可以通過n 2個選手設計的比賽日程表來決定。遞迴地...
迴圈日程表問題(分治遞迴)
參考部落格 迴圈日程表問題。n 2k 個運動員進行網球迴圈賽,需要設計比賽日程表。每個選手必須與其他n 1 個選手各賽一次 每個選手一天只能賽一次 迴圈賽一共進行n 1 天。按此要求設計一張比賽日程表,該錶有n 行和n 1 列,第i 行j列為第i 個選手第j 天遇到的選手。該問題和棋盤問題很像,都可...