NOJ 1243 迴圈賽日程表

2021-10-24 20:05:31 字數 1030 閱讀 9454

時限:1000ms 記憶體限制:10000k  總時限:3000ms

描述用分治演算法生成迴圈賽日程表(1到2的n次方個人)

輸入乙個小於等於7的正整數n

輸出迴圈賽日程表(1到2的n次方個人)

輸入樣例

輸出樣例

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、2

如果有四名隊員,那麼編號就是1、2、3=(1+2)、4=(2+2)

如果有八名隊員,那麼編號就是1、2、3、4、5=(1+4) 6=(2+4) 7=(3+4) 8=(4+4)

此時應該可以看出規律了,他們唯一的不同就是編號。

以四人為例:

那麼我們可以將其分為兩個賽區,第一賽區1和2號,第二賽區3和4

那麼第一賽區的安排和第二賽區的安排就一模一樣(不同之處在於選手編號在第一賽區基礎上+2)

那麼賽程的上半程就可以直接安排出來了

接下來安排賽程的下半程,將1號和2號放入第二賽區,3號和4號放入第一賽區。

他們的賽程安排從上半程賽區安排直接複製就可以了。

以八個人為例,八個人可以分成兩批,每批四個人,再將四個人分成每批兩個人,再分成每批乙個人,也就是自己跟自己

*/ #includeusing namespace std;

int a[200][200]=,n;

int main()

while(cnt <= n)

} for(i = 0;i < k;i++)

} k *= 2;

} for(i = 0;i < m;i++)else

} }}

遞迴分治篇 迴圈賽日程表NOJ1243

時限 1000ms 記憶體限制 10000k 總時限 3000ms 對於 n 2 個選手,設計乙個滿足以下要求的比賽日程表 1 每個選手必須與其他n 1個選手各賽一次 2 每個選手一天只能賽一次 3 迴圈賽一共進行n 1天。用分治演算法生成迴圈賽日程表 1到2的n次方個人 乙個小於等於7的正整數n ...

1243 迴圈賽日程表

時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述 用分治演算法生成迴圈賽日程表 1到2的n次方個人 輸入 乙個整數n 輸出 迴圈賽日程表 1到2的n次方個人 輸入樣例 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 ...

迴圈賽日程表

對於書上那個日程表的實現,第三版的課本給出了迴圈實現的方法,不過這個表的生成明顯要用遞迴方法生成更為合適,此表如下 可以看到每次該錶的生成總可以分成四個字表的填充過程,初始化讓左邊第一列填充上之後,然後每一次先遞迴填充左上角的子表,然後再填充左下角的子表,然後右上和右下的子表用copy的方法填充,實...