台北市九十八學年度高中資訊 學科能力競賽 程式設計試題
(建國中學資訊科校內培訓第一次模擬競賽)
下表為評分用,請勿填寫
題目 不對稱戰爭 War
購物計劃 Shopping
排隊問題 Order
孔明棋 Chess
惰性氣體 Gas 測試一
測試二 測試三 測試四 測試五 總分
總分 _____________ / 125
選手簽名 _________________ 評審 __________________
准考證號碼:_____________
(班級座號)姓名:_____________
USB 號碼:_____________
(帳號)注意事項
一、此競賽採部分電腦線上自動評分,因此參賽選手應嚴格遵守每一題目 所規定之目錄、執行檔、輸入檔、輸出檔之路徑、名稱及格式。若未 遵守,該題可以0分計算。
題目 不對稱戰爭 War
購物計劃 Shopping
排隊問題 Order
孔明棋 Chess
惰性氣體 Gas 目錄 --- --- --- --- ---
可執行檔 war.exe shopping.exe order.exe chess.exe gas.exe
輸入檔 war.in shopping.in order.in chess.in gas.in
輸出檔 war.out shopping.out order.out chess.out gas.out
總分 25 25 25 25 25
二、針對每一題所完成之程式,其每一筆測試資料的執行時間以10秒為限
。執行時間超過10秒者視同未完成,該筆測試資料將以0分計算。
所規定之目錄、執行檔、輸入檔、輸出檔之路徑、名稱及格式。若未 遵守,該題可以0分計算。
三、競賽結束後,參賽選手應在指定的時間內與評審 共同進行程式測試與評 審作業。
四、每一筆測試資料沒有部分給分,但每一題可以只答對部分的測試資料。
建中校內培訓模擬競賽特殊規則:
一、比賽途中請將程式碼上傳到http://math120908.infor.org/JudgeOnline/
系統,比賽結束後將以最後一次上傳的程式碼為評分依據,逾期不以計 算。(注意:是上傳程式碼(.cpp)而非執行檔(.exe),請勿搞混)
二、比賽途中對題目有任何問題可以至上述網址發問,上述網址亦有備份 程式碼的功能,請隨時記得備份。
三、結束後會統一評測,方式為讀檔寫檔,請依照上方表格以及各題題目名 稱下方的輸出、輸出檔名作輸入、輸出。
題目一:不對稱戰爭(War)
輸入方式:war.in 輸出方式:war.out
問題描述
所謂的「不對稱戰爭」指的是一種特殊的戰爭類型,其因素起源於戰 爭雙方之間不相同的差異,而若因此造成雙方能力差異,使得有一方 處於明顯的強勢,另一方表現出顯著的弱勢,則我們稱這種戰爭為「
不對稱戰爭」。
舉例來說,如果一方的武器、資源遠遠高出另一方,如同當年的滿清 對抗西方列強;或者是一方擁有大範圍的爆破炸彈另一方卻只有短槍
;或是一方的資訊科技技術領先另一方數十年,這些都算是所謂的「
不對稱戰爭」。
現在,古古國跟科科國為了一些利益以及政治上的糾紛起了很大的衝 突,戰爭一觸即發!然而,古古國的陸軍精銳部隊是屬一屬二的優秀
,直接迎擊的話以科科國現階段的實力是無法與之抗衡的。
因此,科科國決定利用其先進的科技技術來進行一種不對稱戰爭的作 戰方式:利用先進的衛星探測技術來事先得知對方各部隊的戰力,藉 以用來安排自身國家的部隊,達到最大的效率及戰力。
現在,你是策劃第一批迎擊部隊的參謀,你已經得知對方各部隊的攻 擊指數(即進攻能力的綜合評估結果),當然你也知道我方各部隊的 攻擊指數。每一個部隊都只能迎擊對方一個部隊,且所有部隊都必須 出動,並且,你知道根據攻擊指數的大小,攻擊指數大的部隊一定會 戰勝攻擊指數小的部隊(不考慮心理因素或奇蹟等不確定因素),若 雙方攻擊指數相等則不分勝負。
請你寫一個程式,對於每種事件的情況,決定出如何調用我方軍隊 已獲得較多場的勝利。
註1:若我方部隊迎擊相對應得對方部隊獲勝,則稱我方得到一場勝利
;反之,若對方部隊勝利,則稱對方得到一場勝利。
註2:你可以假設每一次對方部隊的數目皆等於我方部隊的數目。
輸入檔格式 (war.in)
每筆輸入檔都代表著一個衝突事件,輸入檔的第一行有一個正整數N
(N的大小不會超過16)代表本次衝突雙方的部隊個數(記住雙方的 部隊個數永遠相同),接下來有2N行資訊,其中前N行代表對方由 左翼(最左端)到右翼(最右端)的部隊,對於每一行的部隊都有一 個長度不超過 50 的字串代表該部隊的名稱以及一個正整數Ai代表該 部隊的攻擊指數;之後的N行則代表我方部隊的資訊(注意:我方軍 隊尚未安排戰鬥位置),每一行都代表一個部隊,包含一個長度不超 過50 的字串代表該部隊的名稱以及一個正整數Di代表該部隊的攻擊 指數。
所有部隊的名稱皆由大、小寫英文字母或阿拉伯數字構成。
所有部隊的攻擊指數皆不超過 1,500。
輸出檔格式 (war.out)
對於每筆輸入檔,你應當產生出一個輸出檔,裡面包含一個整數W,
代表在輸入檔所描述的衝突事件裡,我方部隊可以經由配置適當的位 置最多得到W場勝利。
輸入檔範例 1 輸入檔範例 2
1 2
Skyly 780 COM1 720
Tmt514 1500 COM2 800
PlAyEr 810
pLaYeR 750
輸出檔範例 1 輸出檔範例 2
1 2
題目二:購物計劃(Shopping)
輸入方式:shopping.in 輸出方式:shopping.out
問題描述
卡卡嗯今天由於輕鬆寫完了某知名Online Judge System的題目,興高 采烈地前往上恩市最大的商店街──下恩街,準備進行一場瘋狂購買 活動以慶祝他很威很強大的創舉。
下恩街是一條十二呎寬的超寬直線街道,其中一側是住宅區,另一側 則是蔓延二三十公里(沒錯,真的非常長)的商店街。這條商店街主 要是由琳瑯滿目的商店組成的,從飲食、衣飾到遊樂器材、運動用品 等等,可說是應有盡有。其中,有一本名叫 Tomato Life 的著名休閒 雜誌上曾經多次票選出了「本季最值得逛的 N間店面」,N曾經最多
達到1,000 之多!(不要懷疑,真的是1,000家),無論怎麼樣,卡
卡嗯決定要照著雜誌上所推薦的一一參訪並購買該店的招牌商品。
但是,卡卡嗯馬上發現有些事情不對勁。首先,儘管他很威,但在負 重很大的情形下走路的速度也會變慢,當然,很威的卡卡嗯是不會擔 心要走很長的距離或是要走很久,但是他還是想要盡快的逛完所有的 商店以趕快回家繼續秒其他Online Judge 的題目,因此,他自己很快 的寫了一個程式,求出了最佳的方案。
聽到了這件事情的明明對這「最佳的方案」也感到很有興趣,但他卻 寫不出來,因此他決定求助於你,請你寫一個程式,求出走訪這些商 店的最佳方案。
所謂的最佳方案就是花最短的時間拜訪所有的商店,
對於商店i跟商店j(1≦i, j≦N),卡卡嗯從商店i到商店j所需要的
時間為 | Xi – Xj | × Wct,即兩商店之間的距離乘上當下卡卡嗯身上所 背的重量。
對於行程的出發點及終點,你可以任意選擇從其中一個店家開始、任 意選擇一個店家結束。
你可以假設進出商店、和店員殺價、結帳等瑣碎的時間可以被忽略。
輸入檔格式 (shopping.in)
每筆輸入檔的第一行包含一個正整數 N,代表該期的雜誌所推薦的店 家數。
第二行開始有N行資料,每一行都有兩個正整數 Xi、Wi,分別代表每 家商店的位置跟該商店招牌商品的重量,各商店的位置座標是與商店 街起點的距離。
其中對於所有1≦i≦N,有0≦Xi≦1,000,000、0≦Wi≦200,000 。
輸出檔格式 (shopping.out)
對於每筆輸入檔,你應當產生出一個輸出檔,裡面包含一個整數T,
代表根據輸入檔所描述的商店資訊,最佳方案所需要花的時間。
輸入檔範例 1 輸入檔範例 2
5 3
5 3 5 1
3 1 6 9
7 8 4 2
2 1 4 2
輸出檔範例 1 輸出檔範例 2
21 5
題目三:排隊問題(Order)
輸入方式:order.in 輸出方式:order.out
問題描述
為了一睹本年度世界盃的風采,許多的球迷早了一天,從前天凌晨開 始就在售票處外排隊。但是,由於只是這樣排著排隊時在是太無聊了
,因此,他們決定看看在隊列中有沒有跟他們穿著很相像的人。
我們認定球迷 A與球迷 B 能互相看見若且為若他們相鄰或在他們之 間都沒有身高比他們兩人其中一人高的球迷。
現在你是在隊列中唯一有帶筆記型電腦的球迷,因此,無聊的群眾們 不斷的慫恿你寫一個程式來計算目前的隊伍中共有幾對球迷可以互相 看見彼此。
注意:球迷A跟球迷B這一組與球迷B跟球迷A這一組我們視為是 同一組。
輸入檔格式 (order.in)
每筆輸入檔的第一行包含一個正整數 N,代表現在隊列中的人數。
第二行開始有N行資料,每一行都有一個正整數 Hi,代表第i個人的 身高(1≦i≦N),所有人的身高都小於2147483648。
總人數N不會超過500,000。
輸出檔格式 (order.out)
對於每筆輸入檔,你應當產生出一個輸出檔,裡面包含一個整數 P,
代表在輸入檔所給定的隊列中,共有P對球迷是可以互相看見的。
輸入檔範例 1 輸入檔範例 2
7 3
2 1
4 2
1 1
2 2 5 1
輸出檔範例 1 輸出檔範例 2
10 2
題目四:孔明棋(Chess)
輸入方式:chess.in 輸出方式:chess.out
問題描述
孔明棋,也稱作單身貴族、獨立鑽石棋。起源於18世紀法國的宮廷貴 族,是一種自我挑戰的遊戲,可以鍛鍊邏輯思維能力。
孔明棋的玩法類似中國跳棋,但不能走步,只能跳。
棋子只能跳過相鄰的棋子到空位上,並且把被跳過的棋子吃掉。
棋子可以沿格線橫、縱方向跳,但是不能斜跳,剩下越少棋子越好。
因為胖胖國國王愛上了這種遊戲,所以便以此舉才,給每個考生一個 盤面(棋盤長度為1×M,M為任意正整數),錄取最後只剩下一顆棋子 的考生。
為了防止作弊,胖胖國國王希望能給每個考生不同的盤面,而且為了 公平,希望每個盤面的棋子數都一樣,而且都有最後只剩一顆的解。
例如:當每人四顆棋子時,有以下兩種排法有解:
另外,下面這種雖然也可以,但是跟上面第二種排法算是同一種排法。
輸入檔格式 (chess.in)
每筆輸入檔的只有一個正整數 N,代表有N顆棋子。
N 不會超過 10,000。
輸出檔格式 (chess.out)
對於每筆輸入檔的N,你應當產生出一個輸出檔,
裡面包含一個整數 S,代表在 N 顆棋子的情況下,有S種不同的盤 面只剩一顆的解。
輸入檔範例 1 輸入檔範例 2
2 7
輸出檔範例 1 輸出檔範例 2
1 8
題目五:惰性氣體(Gas)
輸入方式:gas.in 輸出方式:gas.out
問題描述
露西卡在上化學課的時候,由於覺得實在是太無聊了,因此便一直盯 著吊掛在黑板上方的元素週期表看。為了排解無聊,露西卡決定製作 一張屬於她自己、完全不同於標準的元素週期表。
她的週期表包括N行,每一行都有其高度並對齊於底部(見下圖)。
而在她畫完了週期表的架構後,需要填入一些元素進去,她首先考慮 到的便是惰性氣體(共K種),並且她希望把它們全部放進她的週期 表中但沒有任兩種惰性氣體是接近的。
我們說兩種惰性氣體在週期表中互相接近若且唯若它們在同一行或同 一列,而且在他們之間的格子必須都要存在。下面的圖便是一個範例
,我們說兩個a不接近但兩個b接近。
請你寫一個程式,給定N與K,以及那N行的高度,計算露西卡總共 有幾種符合條件的放法。
由於答案可能很大,因此請輸出答案除以1,000,000,007的餘數。
輸入檔格式 (gas.in)
每筆輸入檔都有兩行資料。
第一行包含兩個正整數N、K,之間以一個空白分開,分別代表露西 卡的週期表的行數以及惰性氣體的種類數。
第二行有N個正整數,以空白隔開,分別代表由左到右每一行的高度
,這些高度最多到 1,000,000。
其中對於所有N、K,1≦N≦500、1≦K≦500。
輸出檔格式 (gas.out)
對於每筆輸入檔,輸出露西卡將K種惰性氣體填入表格中的方法數除 以 1,000,000,007的餘數。
輸入檔範例 1 輸入檔範例 2
3 3 5 2
2 1 3 2 3 1 2 4
輸出檔範例 1 輸出檔範例 2
2 43