• Tidak ada hasil yang ditemukan

台北市九十九學年度高級中學資訊學科能力競賽 程式設計試題

N/A
N/A
Protected

Academic year: 2023

Membagikan "台北市九十九學年度高級中學資訊學科能力競賽 程式設計試題 "

Copied!
12
0
0

Teks penuh

(1)

題目 地球圍棋 go

打印機問題 typeprinter

列表處理語言 lisp

分子碰撞實驗 vijos

旋轉遊戲 game 測試一

測試二 測試三 測試四 測試五 測試六 測試七 測試八 測試九 測試十

台北市九十九學年度高級中學資訊學科能力競賽 程式設計試題

(建國中學資訊科校內培訓第二次模擬競賽)

准考證號碼: ___________

姓名: ___________

USB 號碼: ___________

下表為評分用,請勿填寫

總分

/ 250

選手簽名 評審

(2)

題目 地球圍棋 go

打印機問題 typeprinter

列表處理語言 lisp

分子碰撞實驗 vijos

旋轉遊戲 game

時間限制 1.0 sec 3.0 sec 1.0 sec 1.0 sec 0.8 sec 記憶體限制 32 MB 32 MB 32 MB 32 MB 32 MB

目錄 --- --- --- --- ---

可執行檔 go.exe typeprinter.exe lisp.exe vijos.exe game.exe

輸入檔 go.in typeprinter.in lisp.in vijos.in game.in

輸出檔 go.out typeprinter.out lisp.out vijos.out game.out

總分 50 50 50 50 50

注意事項

一、此競賽採部分電腦線上自動評分,因此參賽選手應嚴格遵守每一題目所規定之目錄、

執行檔、輸入檔、輸出檔之路徑、名稱及格式。若未遵守,該題將可以 0 分計算。

二、針對每一題所完成之程式,每一題皆會個別限制其執行時間及使用記憶體上限。執 行超過時間或使用過量記憶體的測試資料視同未完成,該筆將以 0 分計算。

三、競賽結束後,參賽選手應在指定的時間內與評審共同進行程式測試與評審作業。

四、每一筆測試資料沒有部分給分,但每一題可以只答對部分的測試資料。

建中校內培訓模擬競賽特殊規則:

一、比賽途中

據,逾期不以計算。(注意:是上傳程式碼(.cpp)而非執行檔(.exe),請勿搞混。)

二、比賽途中對題目有任何問題可以至上述網址發問,上述網址亦有備份

程式碼的功能,請隨時記得備份。

三、結束後會統一評測,方式為讀檔寫檔,請依照上方表格以及各題題目名稱下方的輸 出、輸出檔名作輸入、輸出。

(3)

題目一:地球圍棋(GO)

輸入方式:go.in 輸出方式:go.out 時間限制:單筆 1.0 secs

記憶體限制:32MB 題目敘述

還記得火星圍棋(TPE’08 prob.5,TIOJ 1580)嗎?

大意是說地球上一群探險家在西元2050年在火星發現了火星人玩的圍棋。

詳細規則不是很重要,你只要知道一點──大概是腦袋壞掉的人才會去想玩那麼麻煩的 遊戲吧!需要計算幾何等等奇怪的技巧……還是人類在玩的圍棋比較簡單易懂。

如今來到了民國2050年,第一批台灣太空人到火星發現了裡面確實有高級生物存在並且 嘗試與他們溝通。它們對於地球語言的悟性意外地強,故和太空人們相談甚歡。

聊著聊著自然聊到了圍棋。

它們得知地球也有圍棋自然很好奇,太空人們也簡單地跟它們解釋過地球圍棋的規則:

1. 兩位參賽者輪流下子,共有黑白兩色,而第一手是黑棋下。

2. 每顆棋子會跟它四方位相鄰的同色棋子成為生命共同體,要嘛同時生存在盤上,要 嘛同時死掉並從盤面上移除。

3. 每一團塊棋子壽命是用跟它相鄰的空點有幾個來計算:如果它周圍所有空點都被敵 方棋子或是棋盤邊緣佔據,那這團棋子就會死掉了,並且從盤面上移除

如下圖左中間那團黑棋有六氣(紅點處、對角不算。)、

下圖中那團黑棋只要a位置被白棋下它就死掉了,會形成下圖右局面。

外星人會問你很多盤面,對於每個盤面你都要告訴它,這是不是個合法盤面。

※不合法:盤上有某團棋子已經死掉卻沒有被移除。

(4)

輸入說明(go.in)

第一行會有一個數字T,表示接下來有多少盤面(T <= 20)

對每個盤面第一行有一個數字N,表示這個棋盤大小為N x N

接下來有N行,每行會有N個字元,保證每個字元一定是下列三者之一:

若為B表示該位置有黑棋。

若為W表示該位置有白棋。

若為-表示該位置沒有任何棋子。

輸出說明(go.out)

對每個盤面輸出一行包含一個單字。

"TAK" 表示該盤面完全合法。

"NIE" 表示該盤面不合法。(均不含雙引號)

範例輸入 4

5 --- ----W ---WB ---WB --WBB 3 --- -W- --- 5 --WBW --BBW -WWBW -B--- WWWWW 4 -WB- WBWB -WB- ----

範例輸出 NIE TAK TAK NIE

提示

對於30%測試資料,N <= 9 對於100%測試資料,N <= 81

※絕對不會有一筆測試資料全部輸出NIE或是TAK

※注意輸出是全部大寫的字母。

(5)

題目二:打印機問題(TYPEPRINTER)

輸入方式:typeprinter.in 輸出方式:typeprinter.out

時間限制:單筆 3.0 secs 記憶體限制:32MB 題目敘述

回憶一下你的老埃及打印機。

你有一個打印機、一堆金屬字母塊。打印機支援以下的操作,且每個操作都要一塊金幣:

.在打印機的尾端添入一個金屬字母塊

.複印出打印機中的字母塊所排出的字

.從打印機的尾端拿走一個金屬字母塊

然後你曾經有一個任務,就是用最小的花費把一堆字母全部打印出來(以任意的順序)。

當然,一開始打印機中沒有任何金屬字母塊,打印完成後也不需要把金屬字母塊清空。

成功的解決任務後,你獲得了一個100 塊。

現在,科技進步了,你的財產也從一個老打印機進化成很多臺雷射印表機。根據公司的 影印細則,每台雷射印表機一開始都被指定了一些印表工作,而且優先權越高的列印工 作應該越先被完成。不幸的是,在列印某些工作時,印表機的墨水會用盡。這時,當下 正在列印的工作以及此台印表機所有尚未完成的工作會全部被加到某台可以列印的印表 機的等待佇列當中。

當然,這台印表機也無法再印任何的東西。

不過注意,如果發現加入印表機佇列的新工作比正在列印的工作優先權還高,那你應該 要停止正在列印的工作,並且立刻去列印優先權較高的新工作。

那你最後會在什麼時候完成所有的列印工作呢?

輸入說明(typeprinter.in) 第1行:

有一個正整數N,代表共有N臺雷射印表機。

第2行到第N+1行:

第i+1行的一開始會有一個非負整數Mi,代表第i臺雷射印表機一開始被指定了Mi 件工作。接下來會有Mi個整數對,第j個數對(Pij, Tij)代表第i臺雷射印表機的第j件工 作的優先權是Pij、需要費時 Tij的時間。保證任兩列印工作的優先權都相異。

第N+2行:

一個正整數E,代表總共有E個事件。

第N+3行到第N+E+2行:

第N+k+2行依序有三個正整數Tk Rk Ak,代表在時間點Tk的時候,編號Rk的雷射印 表機墨水用完了,且把剩餘(包括正在印)的工作全部加到編號Ak的印表機。

保證T1≦T2≦T3≦…≦Tn且Ak一定還有剩餘的墨水。

輸出說明(typeprinter.out)

第一行:一個正整數F,代表所有工作印完的時間。

(6)

範例輸入 5

0 1 1 3 2 2 4 3 5 0

2 5 3 4 2 2

2 2 1 4 5 3

範例輸出 15

提示

佔總分50%的測試資料中,

1≦N≦5,000,總列印工作數不超過5,000件。

對於所有的測試資料而言,1≦N≦100,000,總列印工作數不超過1,000,000件。

答案不會超過231-1,且0≦E<N。

(7)

題目三:列表處理語言(LISP)

輸入方式:lisp.in 輸出方式:lisp.out 時間限制:單筆 . secs

記憶體限制:32MB 題目敘述

LISP(全名LISt Processor,即列表處理語言),由約翰·麥卡錫在1960年左右創造的一 種基於λ演算的函數式程式語言。

LISP有很多種方言,各個實現中的語言不完全一樣。1980年代Guy L. Steele編寫了Common Lisp試圖進行標準化,這個標準被大多數解釋器和編譯器所接受。在Unix/Linux系統中,

還有一種和Emacs一起的Emacs Lisp(而Emacs正是用Lisp作為擴展語言進行功能擴展的)

非常流行,並建立了自己的標準。……

──摘自zh.Wikipedia LISP簡單來說就是反覆對表進行求值的動作。

一個表的架構如下:

(function_name 參數1 參數2 …… )

例如說(func 2 3)就是一個表,換成C語言的理解方式它就是func(2,3)。

當然一個表裡面的參數也可能是別的表,例如:

( + 1 ( / 4 2 ) ) = ( + 1 2 ) =

3

現在給你一個表,裡面的函式有可能出現 + - * / 四種,請輸出對這個表求值的結果

輸入說明(lisp.in)

每個檔案僅包含一組測資。

每筆測資包含兩行,第一行有一個數字N,表示這個表可以用N個字串表示。

第二行會有N個字串,每個字串間用至少一個空白分開,可能為以下三者其一:

單一一個左括號“(”或右括號“)”:用來表示一個表的開始跟結尾。

單一一個運算元“+”、 “-”、 “*”、 “/”。

一個32位元int範圍內的正整數。

※除法視為無條件捨去,例如( / 8 3 ) = 2。

輸出說明(lisp.out)

輸出只有一行包含一個數字K,代表你對這個表求值後的答案。

(8)

範例輸入 1 13

( + ( * 2 4 ) ( / 3 5 ) )

範例輸出 1 8

範例輸入 2 17

( - 1000 ( + 3 ( * 2 ( + 3 5 ) ) ) )

範例輸出 2 981

提示

對於 40%的測試資料,你可以保證輸出不超過64位元int範圍。

對於 90%的測試資料,你可以保證輸出不超過1000位數。

對於100%的測試資料,你可以保證輸出不超過3000位數且N <= 30,000。

對於 60%的測試資料,裡面的運算子只會有 + - * 三種。

(9)

題目四:分子碰撞實驗(VIJOS)

輸入方式:vijos.in 輸出方式:vijos.out 時間限制:單筆 1.0 secs

記憶體限制:32MB 題目敘述

2011年諾貝爾誤理學獎頒給了熱狗神阿思,原因是他製造出一種不穩定的分子。

這種分子只要兩兩碰在一起就會完全轉換成能量,而產生的能量遠超過E = mc^2所得出 來的結果,而是E = Kmc^2,K被稱為阿思常數。

而這種分子相當不穩定,存在的時間相當短,因此阿思將它命名為 人造暫時存在分子 (Artificial Temporarily Presence Molecule),

簡稱ATP分子。

阿思得到誤理學獎後,掀起了研究這種分子的風潮,就連阿思自己的物理實驗室裡頭的 研究生也逃不了。

阿思的學生設計了一個實驗,將這些分子放在編號 1 ~ N 的特殊容器裡排成一排,

然後讓某一段的分子融合產生湮滅現象來產生能量,藉由計算能量差來驗證阿思常數的 精確數值。

可是儀器本身有點瑕疵,一開始並不會將所有容器都放入1個分子,有些會沒有放到,或 是同時放了2個於是就湮滅消失。

所幸每一次實驗,儀器會重複犯錯,也就是說先前放入2個分子的容器,下一次也一樣會 放入2個,因此每一次實驗開始前的分子分布狀態會一模一樣,且每次實驗前儀器都會清 空,所以你可以確定上一次實驗的分子不會影響這次實驗。

而學生會把某一段分子湮滅後所剩餘的分子個數記錄下來,而阿思打算用這些數據寫成 論文,但是他為了檢查學生有沒有偽造部分數據,打算寫個程式檢查。

但是他還有其他事要忙,於是身為偉大的阿思神學弟,你自告奮勇的要來解決這個問題。

如果數據有偽造的現象,請輸出第一次偽造是第幾次實驗。

(10)

輸入說明(vijos.in)

單一檔案內包含多組數據,對於每組數據:

第一行包含兩個數字,N, M,表示有N個容器,且實驗進行了M次。

接下來有M行,每行含三個數字L, R, C,表示學生在這次實驗中,將L到R之間的容器合 併,產生湮滅現象後,剩下C個分子。

如果N = M = 0代表檔案結束,請不要對這行進行任何輸出。

輸出說明(vijos.out)

對每組數據輸出單一一行含一個數字,表示數據第一次偽造是在第幾次實驗。

如果數據都正常,請輸出"He didn't lie."(不含雙引號)

範例輸入 2 3 1 1 1 2 2 1 1 2 1 2 3 1 1 1 2 2 1 1 2 0 10 5 1 2 0 3 4 1 5 6 0 1 6 0 7 10 1 0 0

範例輸出 3

He didn't lie.

4

提示

對於100%的測試資料,單檔不會超過50組數據。

對於40%的測試資料,N <= 15 對於70%的測試資料,N <= 100,000

對於100%的測試資料,N <= 1,000,000,000 對於10%的測試資料,M = 0

對於30%的測試資料,M <= 15 對於100%的測試資料,M <= 10,000

向Vijos致敬!

※vijos是大陸一個Online Judge,許多題目都十分有趣,但可惜最後因為維修問題,現 在無法連上。這題便是該Online Judge名題之一。

(11)

題目五:旋轉遊戲(GAME)

輸入方式:game.in 輸出方式:game.out 時間限制:單筆 0.8 secs

記憶體限制:32MB 題目敘述

小華(嘿不是小明了!)發明了一種遊戲叫做旋轉遊戲。

這不是那種常常在舞池看到那種兩三個人轉來轉去那種遊戲,這是一類益智遊戲。

一個旋轉遊戲的盤面如下,共有24格,其中1, 2, 3各剛好8個。

圖中顯示的A~H是這個旋轉遊戲的八種移動方式。

例如說A就是把該直行7個數字都往上推,同時最上面那個1就會遞補到最下面。

遊戲目標是讓任何一個數字八個都排在正中央的環上。例如右圖即是2-完成圖。

小華自己試玩了一下發現這個遊戲難度太高了,他便希望寫一個程式來幫他找出最小步 數的答案,若有許多一樣最小步數的解法,要找出字典順序最小的答案。

同時,他也想知道這個最佳解的中心是哪個數字。

輸入說明(game.in)

單一檔案含多組資料,每筆資料:

只有一行,包含24個數字以空白分隔,表示起始盤面。

起始盤面的給法是由上到下、由左到右依序給數字。

例如上圖左邊那個盤面會表示為1 1 1 1 3 2 3 2 3 1 3 2 2 3 1 2 2 2 3 1 2 1 3 3 當讀到一行只含單一一個數字0表示輸入結束,請不要對這行作輸出。

輸出說明(game.out) 對每組詢問輸出兩行,

第一行包含一個字串表示最小步數中字典序最小的解。

如果當前盤面不需移動,請輸出"No moves needed"(不含雙引號)

第二行包含一個數字表示終止盤面的中心數字是多少。

(12)

範例輸入

1 1 1 1 3 2 3 2 3 1 3 2 2 3 1 2 2 2 3 1 2 1 3 3 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 1 1 1 1 3 3 2 2 2 3 3 2 2 3 3 2 2 2 3 3 1 1 1 1 0

範例輸出 AC 2 DDHH 2

No moves needed 2

提示

第一組範例即為上頁最左邊之圖。

對於 50%測試資料,每個檔案僅有1筆資料。

對於100%測試資料,每個檔案包含的盤面數 <= 30。

※字典順序(Lexicographical Order):

對於兩個序列S,W,如果我們從頭一個字元一個字元地比較,

存在某個i使得Si < Wi且對於所有k<i,Sk == Wk,即表示S的字典順序 < W的字典順序。

例如,顯而易見地,COKECOLA的字典順序比COQUELICOT小。

再者,ABC的字典順序也比ABCC小。

或著也可以直觀想成你在從頭翻閱字典,較早翻到的單詞就是字典順序較小的。

※烏龜系列停刊一期※

Referensi

Dokumen terkait

90~109年會考分類試題 編授:Jim ◎請閱讀下列敘述後,回答第59題: 圖為某科學博物館一樓各個展場的介紹簡圖: 59.( C )館長想將B區兩個展場的內容合併在同一個展場,並給予一個新的展出主題,下 列哪一個是最適合的名稱? A電解質特展 B無機化合物的世界 C認識週期表上的物質 D構成材料的物質-金屬合 金 。 【 102年試辦會考】

設甲、乙、丙三人射擊的命中率依次為、、,今三人同時向空中的一隻飛鳥各發射一彈,且每個人 命中此鳥的事件為獨立事件,試求:1 此鳥恰中一彈的機率。 2 此鳥被擊中的機率。 11... 設甲、乙、丙三人各自獨立破解一個密碼時,能譯出來的機率分別為、、,今已知恰有一人能譯出 來,求此人是甲的機率。