時間限制: 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 ...