臺北市一 O 七學年度高級中等學校電腦程式設計競賽決賽試題
(高中組)
說明: 1. 本試卷共有四題,每題 25 分。 2. 請記得隨時備份自己的程式。試題 1:配對連線
問題敘述: 在一個圓上有 2N 個點,若將這些點每兩點配成一對,然後配為一對的兩點以 一條直線連線,可得 N 條連線;形成這 N 條連線的配對方式很多,但現在有個特 別的規定:這 N 條線彼此不可以相交。如圖一,圓上有四個點,(a) (b)這兩種配對 連線方式是符合規定的,但(c)則不符合規定。 請你寫一個程式來計算若一個圓上有 2N 個點,那符合規定(配對連線彼此不 相交)的配對連線方式有幾種?譬如:如圖一,圓上有四個點(N=2),則符合規定的 配對連線有兩種,輸出答案為 2。 輸入說明: 輸入包含數組測試資料,每組資料一列包含一個整數 N,1N100,其代表圓 上有 2N 個點。N=0 代表輸入結束。 輸出說明:(顯示在螢幕上) (程式必須在 3 秒內執行完畢,否則不計分) 對每一組測試資料,顯示有幾種符合規定的配對連線。 輸入範例: 1 2 3 0 輸出範例: 1 2 X <=某整數 (a) (b) (c) 圖一. 圓上四點之兩兩配對連線情形試題
2.
湖畔大樓
問題敘述 動物們昨晚在森林深處發現一個優美的湖泊,所有動物都非常興奮。長頸鹿 提議,大家在湖畔蓋一棟大樓,讓所有動物從此都能住在湖畔,大家都同意了。 老鼠說,「我想要住在一樓。」大象說,「可是,我也想住在一樓耶。」這下好了, 現場的動物開始熱烈討論每隻動物應該住在第幾層樓。(假設一層樓只能住一隻動 物。)經過一晚的討論,動物們發現決定居住樓層的關鍵因素有兩個:居住空間 高度 H-有些動物像長頸鹿需要特別高的空間,和最大高度限制 L-有些動物有 懼高症,不想住得太高。 動物 居住空間高度 最大高度限制 老鼠 2 5 大象 5 1 長頸鹿 10 7 以上面的例子來說,如果讓老鼠住在第一層樓(地板高度 05),大象住在第 二層樓(地板高度 0+2=2>1),長頸鹿住在第三層樓(地板高度 0+2+5=77),老鼠 和長頸鹿同意,但大象住在過高的樓層因此不願意住進去了,請參見以下圖例。 但如果讓大象住第一層(地板高度 01),老鼠第二層(地板高度 0+5=55), 長頸鹿第三層(0+5+2=77),三隻動物就都能滿意地住進大樓裡。 森林裡的動物太多了,需要你幫忙寫一個程式,依據動物們的需求,計算最 多能有多少隻動物滿意地(即地板高度不超過其最大高度限制)住進湖畔大樓裡。 老鼠 大象 長頸鹿 10 5 2 第三層樓,地板高度為 7,長頸鹿能接受。 第二層樓,地板高度為 2,大象不能接受 (最大高度限制是 1)。 第一層樓,地板高度為 0,老鼠能接受。輸入格式 第一最有一個正整數 T (T 5),代表測試資料有幾組。 第二列有一個正整數 N (N 105),代表森林裡有幾隻動物。 接下去有 N 列,每列有兩個正整數值 Hi 和 Li (Hi 109,Li 109),分別代表第 i 隻動物的必要居住空間高度和最大高度限制,整數間以一個空白隔開。 輸出格式 對每一組測資輸出最多能有多少隻動物滿意地住進湖畔大樓裡,每組測資一行。 輸入輸出範例 輸入範例 輸出範例 3 3 2 5 5 1 10 7 3 2 4 5 1 10 7 5 1 1 2 1 3 1 4 1 5 1 3 2 2 本題共有五個子任務,每個子任務佔本題分數之 20%,限制如下: 子任務一:N 3 子任務二:N 8 子任務三:N 16 子任務四:N 1,000 子任務五:N 100,000
試題 3. 延長固態儲存裝置壽命的機制
問題敘述 一個固態硬碟裡面有很多儲存單位,每一個單位的壽命和它被寫入的次數是 相關的,但是平常在一個電腦系統裡有些檔案是很少存取的,有些檔案有一定的 讀取頻率、但是很少被修改,還有一些檔案是常常被讀取和修改的,系統碟中一 旦檔案的位置固定下來以後,常常會發現有一些儲存單位很快就耗損掉了。所以 從系統的角度來看,需要有一個機制固定時間調換每一個儲存單位的內容,如此 每一個儲存單位不但有機會存放常常需要更改的資料,也有機會存放不太需要修 改的資料,固態硬碟裡面的各個儲存單位才有比較一致的耗損率。 考慮一個延長裝置壽命的機制:指定一個如下的「位置調換表」,每隔固定時 間就根據調換表移動所有儲存單位裡的資料,例如下面這個調換表中,儲存在位 置 0 的資料會移動到位置 2,儲存在位置 1 的資料會移動到位置 5,…,儲存在位 置 8 的資料會移動到位置 6。 原位置 0 1 2 3 4 5 6 7 8 新位置 2 5 7 4 1 3 8 0 6 調換過的新位置不能重複,否則有些資料在換位置的時候會被覆蓋掉,另一 些位置則會空著沒有放資料。 由群論我們知道不斷地根據這個位置調換表更換位置的話,只要換了一定次 數之後,所有的資料都一定會同時回到原來的儲存位置上,給定一個位置調換表, 請寫一個程式計算所有資料同時回到原來位置的最少調換次數。 如果一開始位置 i 的資料是數字 i,請問根據指定的位置調換表,是否可以得 到下面這個目標組態? 位置 0 1 2 3 4 5 6 7 8 資料 7 5 0 4 1 3 8 2 6 例如下表顯示經過 7 次調換可以得到指定的目標組態 資 位置 料 0 1 2 3 4 5 6 7 8 調 換 次 數 0 0 1 2 3 4 5 6 7 8 1 7 4 0 5 3 1 8 2 6 2 2 3 7 1 5 4 6 0 8 3 0 5 2 4 1 3 8 7 6 4 7 1 0 3 4 5 6 2 8 5 2 4 7 5 3 1 8 0 67 7 5 0 4 1 3 8 2 6 有一些目標組態是運用上面的位置調換表完全不可能得到的,例如 位置 0 1 2 3 4 5 6 7 8 資料 7 4 0 5 1 3 8 2 6 位置 0 1 2 3 4 5 6 7 8 資料 7 3 0 1 5 4 8 2 6 位置 0 1 2 3 4 5 6 7 8 資料 8 4 0 5 3 1 7 2 6 你的程式需要分辨指定的目標組態是否可以得到? 如果可以的話請輸出 1,如 果無法得到請輸出 0 輸入資料: 第一列有兩個整數,N為 n 個位置(註:第二列以後每列有 n 個整數),M 為測試的 目標組態個數;第二列有 n 個整數 pi,描述完整的位置調換表 (1p1, 2p2, …, npn),n 代表裝置裡總共有多少儲存單位 (2 n 350);第三列以後每一列有 n 個整數 tij (1 i m, 1m10, 1 j n) 描述一個目標組態 N M p1 p2 … pn t11 t12 … t1n t21 t22 … t2n … tm1 tm2 … tmn 輸出資料:第一列為一個整數 k 代表資料最少經過 k 次調換可以同時回到原來位置, 接下來對於每一列的目標組態 (ti1, ti2, …, tin),請判斷由組態 (0,1,2,…,n) 開 始是否可以調換到這個目標組態,可以的話請輸出 1,不行的話請輸出 0,請注 意程式執行時間限制為 3 秒 k a1 a2 a3 … am 範例輸入: 9 4 2 5 7 4 1 3 8 0 6 7 5 0 4 1 3 8 2 6 7 4 0 5 1 3 8 2 6 7 3 0 1 5 4 8 2 6 8 4 0 5 3 1 7 2 6 範例輸出: 12
1 0 0 0