基礎分治演算法題 迴圈比賽日程表

2021-08-05 22:28:01 字數 1098 閱讀 5312

時間限制: 1 sec  

記憶體限制: 128 mb

提交: 1  

解決: 1 [

提交][

狀態][

討論版]

設有n個選手進行迴圈比賽,其中n=2m,要求每名選手要與其他n-1名選手都賽一次,每名選手每天比賽一次,迴圈賽共進行n-1天,要求每天沒有選手輪空。

m(1<=m<=6)

**形式的比賽安排表,每個數占3列。

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
一道基礎的分治,意思大約是每行每列不可以有重複的數字(類似數獨),而且還有時間限制,那個幾串數字嚇得我不敢看,真的覺得很難找規律,然後看了一會決定用打表的方法來做,因為當n*n為64*64時,他的前2*2還是和n為2的時候是一樣的。

如圖上的標記

這樣子只需要知道64*64的全部數字就可以打出前n×n了。

然後這些數字是怎麼填出來來的呢,這裡就體現我們分治思想了。仔細看圖可以發現

看出來了嗎,第乙個粗線框框裡可以分成8個部分。(我只給五個畫了顏色)每個格仔與前面格仔裡的數字一一對映。算算差值你就知道了(每塊的差值都不同)。這個圖還是個對稱圖。

把excel的複製到txt裡把空格替換成逗號就可以給陣列賦值了。

#include#includeusing namespace std;

int ans[64][64]=; //數字太多我怕這裡會炸,我留到後面給你們看。

int main()

{ int m;

while(cin>>m)

{int n=2;

for(int i=1;i

分治 1325 迴圈比賽日程表

今天做了一道題 迴圈比賽日程表,這是一道分治的題,並不太難,看看樣例就懂了。首先,我們以 中心拆分,把 分成四個部分 如上圖所示 你就會驚奇的發現。坐上和右下的部分完全一樣,左下和右上的部分也完全一樣,並且繼續查分的話,這個規律同樣適用。這個時候,你可能已經有思路了。下面,源 1 include2 ...

迴圈比賽日程表

總時間限制 1000ms 記憶體限制 65535kb 描述 設有n個選手進行迴圈比賽,其中n 2 m,要求每名選手要與其他n 1名選手都賽一次,每名選手每天比賽一次,迴圈賽共進行n 1天,要求每天沒有選手輪空。輸入m m 10 輸出 形式的比賽安排表 數字之間以乙個空格分開 樣例輸入 3 樣例輸出 ...

迴圈比賽日程表

設有n個選手進行迴圈比賽,其中n 2m,要求每名選手要與其他n 1名選手都賽一次,每名選手每天比賽一次,迴圈賽共進行n 1天,要求每天沒有選手輪空。輸入正整數m。形式輸出比賽安排表。整數之間用空格隔開,詳見樣例 第一行輸出n個數,表示選手的編號。後面緊接n 1行,每行表示一天的比賽安排。1 2 3 ...