高雄市 110 學年度高中資訊學科能力複賽暨高職電腦程式設計比賽
國中組試題 2021.11.06
(不含封面共 八 頁、賽前題意說明:30 分鐘、競賽時間:240 分鐘) 第 一 題: 鑽石行動 6 分
第 二 題: 長圓周率 10 分 第 三 題: 魔數反串 12 分 第 四 題: 排一下隊 12 分 第 五 題: 精靈遊戲 12 分 第 六 題: (非國中組試題) 第 七 題: 數正整數 16 分 第 八 題: 矩形面積 16 分 第 九 題: 選舉策略 16 分
(題目順序與該題難易度無特定關聯)注意事項:
1. 競賽規則原則上依「賽前說明暨技術手冊」之各項規定,節錄如下:
(1) 解題完成後,需送出單獨的一個程式原始碼檔案至評分系統。送出的程式原始碼,
需確保能在評審主機上正常編譯/執行。
(2) 程式應在開始執行後不經任何手動操作,自動由標準輸入(stdin)讀取輸入資料,將 結果輸出至標準輸出(stdout)後立刻結束程式。標準輸入與標準輸出之操作,請參考 各語言之額外說明。
(3) 若寫作「1 ≤ X,Y ≤ K」或「X,Y 均介於 1 與 K 之間」,則表示同時滿足 1 ≤ X ≤ K 且 1 ≤ Y ≤ K,而 X 與 Y 之間在此沒有規定特定的大小關係。在輸入與輸出格式 中,未特別提及時,每行、列為未經換行符號,ASCII 10 (\n or vbLf) 分隔的一個連 續單位,即英文中「Line」,但檔案最後的換行符號之後不算是新的一列。
(4) 若格式與範例中均未特別指明同列中相鄰項目的分隔方式,則預設為以空白分隔。
僅稱以空白分隔者,指同一列的兩相鄰項目之間以恰一個空白分隔。
(5) 輸入與輸出的每列均應以換列符號「\n」(ASCII 10)結束,並請勿輸出多餘空白、多 餘換列或符號,如 "please enter an integer" 等非題目規定的輸出。若正確答案為 Yes,但你(妳)的輸出為 YES 或 Y,則系統將會因答案錯誤而評定為錯誤;若答案 為「1 2 3 」(中間有空格),但你(妳)的輸出為「123 」(中間沒有空格)或「1 2 3 」(後面輸出空白),系統也可能評為錯誤,反之亦然。未特別說明時,每列 (Line)開頭與結尾均不為空白字元。
(6) 題目未特別說明之情況下,輸入與輸出的正整數數値應使用連續的十進位阿拉伯數 字表示,以數字 1 至 9 開頭;負整數數値以「-」連接其絕對值(正整數)表示,零 以單一個阿拉伯數字「0」表示。浮點數以 "X.Y" 的形式表示,其中 X 與 Y 均為 十進位整數,且X 若不為零,則不得以 0 開頭。
(7) 評分系統採用 Linux 平台,C/C++ 程式語言使用的編譯器為 gcc,若測試時使用 不同C/C++編譯器,應自行考量語法/輸入輸出方式的差異,並注意相關的規則,如 64-bit 之整數資料型態 (long long) 的標準輸入/輸出應使用 %lld 格式字串,並特 別注意指標記憶體大小、cin / cout 之輸入與輸出方式之執行效能等。Python 語言版 本為python3,以主機所使用版本為主。本平台雖提供多種程式語言作答。然而使 用不同的語言撰寫程式,可能會有許多內建函數、功能、記憶體使用量以及執行效 能上差異,並可能因此導致個別語言有特定優勢。為了盡力消除語言之間的差異,
以維持比賽之公平性,題目設計時將會盡力確保對於本競賽所開放使用之各種語言 而言,均存在至少一種能獲得滿分的解答程式。但不得因特定語言導致之解答難易 度差異而提出額外要求 (包括但不限於加分、延長作答時間等)。
2. 各題目之輸出比對與計分方式、編譯器與程式語言、執行時間限制、記憶體空間限制、
原始碼檔案大小限制與其他資源限制等,以評測系統所公布之設定為主。在滿足上述條 件限制情形下,不限制參賽者必須採用題目提及或特定解法作答。
3. 各題之測試資料分組,其評分以該組測試資料之配分佔該題總分之百分比計算,若有不 能整除者,得視情況捨去或進位到整數位。若各組測試資料均得滿分者,該題以滿分 計。在其他情況下,該題之總得分為各組測試資料得分對其所佔權重百分比之加權總 和,並得視情況捨去或進位到整數位,以解題系統為準。若有得分同分比序之必要時,
除系統預設排序方式外,亦得由評審參酌各難度題目之得分比例、小數部分及最後作答
高雄市 110 學年度高中資訊學科能力複賽暨高職電腦程式設計比賽
高職組試題 2021.11.06
(不含封面共 八 頁、賽前題意說明:30 分鐘、競賽時間:240 分鐘)
第 三 題: 魔數反串 6 分 第 四 題: 排一下隊 6 分 第 五 題: 精靈遊戲 12 分 第 六 題: 戰地求生 12 分 第 七 題: 數正整數 16 分 第 八 題: 矩形面積 16 分 第 九 題: 選舉策略 16 分 第 十 題: 陌生三人 16 分
(題目順序與該題難易度無特定關聯)注意事項:
1. 競賽規則原則上依「賽前說明暨技術手冊」之各項規定,節錄如下:
(1) 解題完成後,需送出單獨的一個程式原始碼檔案至評分系統。送出的程式原始碼,
需確保能在評審主機上正常編譯/執行。
(2) 程式應在開始執行後不經任何手動操作,自動由標準輸入(stdin)讀取輸入資料,將 結果輸出至標準輸出(stdout)後立刻結束程式。標準輸入與標準輸出之操作,請參考 各語言之額外說明。
(3) 若寫作「1 ≤ X,Y ≤ K」或「X,Y 均介於 1 與 K 之間」,則表示同時滿足 1 ≤ X ≤ K 且 1 ≤ Y ≤ K,而 X 與 Y 之間在此沒有規定特定的大小關係。在輸入與輸出格式 中,未特別提及時,每行、列為未經換行符號,ASCII 10 (\n or vbLf) 分隔的一個連 續單位,即英文中「Line」,但檔案最後的換行符號之後不算是新的一列。
(4) 若格式與範例中均未特別指明同列中相鄰項目的分隔方式,則預設為以空白分隔。
僅稱以空白分隔者,指同一列的兩相鄰項目之間以恰一個空白分隔。
(5) 輸入與輸出的每列均應以換列符號「\n」(ASCII 10)結束,並請勿輸出多餘空白、多 餘換列或符號,如 "please enter an integer" 等非題目規定的輸出。若正確答案為 Yes,但你(妳)的輸出為 YES 或 Y,則系統將會因答案錯誤而評定為錯誤;若答案 為「1 2 3 」(中間有空格),但你(妳)的輸出為「123 」(中間沒有空格)或「1 2 3 」(後面輸出空白),系統也可能評為錯誤,反之亦然。未特別說明時,每列 (Line)開頭與結尾均不為空白字元。
(6) 題目未特別說明之情況下,輸入與輸出的正整數數値應使用連續的十進位阿拉伯數 字表示,以數字 1 至 9 開頭;負整數數値以「-」連接其絕對值(正整數)表示,零 以單一個阿拉伯數字「0」表示。浮點數以 "X.Y" 的形式表示,其中 X 與 Y 均為 十進位整數,且X 若不為零,則不得以 0 開頭。
(7) 評分系統採用 Linux 平台,C/C++ 程式語言使用的編譯器為 gcc,若測試時使用 不同C/C++編譯器,應自行考量語法/輸入輸出方式的差異,並注意相關的規則,如 64-bit 之整數資料型態 (long long) 的標準輸入/輸出應使用 %lld 格式字串,並特 別注意指標記憶體大小、cin / cout 之輸入與輸出方式之執行效能等。Python 語言版 本為python3,以主機所使用版本為主。本平台雖提供多種程式語言作答。然而使 用不同的語言撰寫程式,可能會有許多內建函數、功能、記憶體使用量以及執行效 能上差異,並可能因此導致個別語言有特定優勢。為了盡力消除語言之間的差異,
以維持比賽之公平性,題目設計時將會盡力確保對於本競賽所開放使用之各種語言 而言,均存在至少一種能獲得滿分的解答程式。但不得因特定語言導致之解答難易 度差異而提出額外要求 (包括但不限於加分、延長作答時間等)。
2. 各題目之輸出比對與計分方式、編譯器與程式語言、執行時間限制、記憶體空間限制、
原始碼檔案大小限制與其他資源限制等,以評測系統所公布之設定為主。在滿足上述條 件限制情形下,不限制參賽者必須採用題目提及或特定解法作答。
3. 各題之測試資料分組,其評分以該組測試資料之配分佔該題總分之百分比計算,若有不 能整除者,得視情況捨去或進位到整數位。若各組測試資料均得滿分者,該題以滿分 計。在其他情況下,該題之總得分為各組測試資料得分對其所佔權重百分比之加權總 和,並得視情況捨去或進位到整數位,以解題系統為準。若有得分同分比序之必要時,
除系統預設排序方式外,亦得由評審參酌各難度題目之得分比例、小數部分及最後作答
高雄市 110 學年度高中資訊學科能力複賽暨高職電腦程式設計比賽
高中組試題 2021.11.06
(不含封面共 八 頁、賽前題意說明:30 分鐘、競賽時間:240 分鐘)
第 七 題: 數正整數 8 分 第 八 題: 矩形面積 8 分 第 九 題: 選舉策略 12 分 第 十 題: 陌生三人 12 分 第 十一 題: 公正比賽 15 分 第 十二 題: 飛彈轟炸 15 分 第 十三 題: 密碼運算 15 分 第 十四 題: 感受排名 15 分
(題目順序與該題難易度無特定關聯)注意事項:
1. 競賽規則原則上依「賽前說明暨技術手冊」之各項規定,節錄如下:
(1) 解題完成後,需送出單獨的一個程式原始碼檔案至評分系統。送出的程式原始碼,
需確保能在評審主機上正常編譯/執行。
(2) 程式應在開始執行後不經任何手動操作,自動由標準輸入(stdin)讀取輸入資料,將 結果輸出至標準輸出(stdout)後立刻結束程式。標準輸入與標準輸出之操作,請參考 各語言之額外說明。
(3) 若寫作「1 ≤ X,Y ≤ K」或「X,Y 均介於 1 與 K 之間」,則表示同時滿足 1 ≤ X ≤ K 且 1 ≤ Y ≤ K,而 X 與 Y 之間在此沒有規定特定的大小關係。在輸入與輸出格式 中,未特別提及時,每行、列為未經換行符號,ASCII 10 (\n or vbLf) 分隔的一個連 續單位,即英文中「Line」,但檔案最後的換行符號之後不算是新的一列。
(4) 若格式與範例中均未特別指明同列中相鄰項目的分隔方式,則預設為以空白分隔。
僅稱以空白分隔者,指同一列的兩相鄰項目之間以恰一個空白分隔。
(5) 輸入與輸出的每列均應以換列符號「\n」(ASCII 10)結束,並請勿輸出多餘空白、多 餘換列或符號,如 "please enter an integer" 等非題目規定的輸出。若正確答案為 Yes,但你(妳)的輸出為 YES 或 Y,則系統將會因答案錯誤而評定為錯誤;若答案 為「1 2 3 」(中間有空格),但你(妳)的輸出為「123 」(中間沒有空格)或「1 2 3 」(後面輸出空白),系統也可能評為錯誤,反之亦然。未特別說明時,每列 (Line)開頭與結尾均不為空白字元。
(6) 題目未特別說明之情況下,輸入與輸出的正整數數値應使用連續的十進位阿拉伯數 字表示,以數字 1 至 9 開頭;負整數數値以「-」連接其絕對值(正整數)表示,零 以單一個阿拉伯數字「0」表示。浮點數以 "X.Y" 的形式表示,其中 X 與 Y 均為 十進位整數,且X 若不為零,則不得以 0 開頭。
(7) 評分系統採用 Linux 平台,C/C++ 程式語言使用的編譯器為 gcc,若測試時使用 不同C/C++編譯器,應自行考量語法/輸入輸出方式的差異,並注意相關的規則,如 64-bit 之整數資料型態 (long long) 的標準輸入/輸出應使用 %lld 格式字串,並特 別注意指標記憶體大小、cin / cout 之輸入與輸出方式之執行效能等。Python 語言版 本為python3,以主機所使用版本為主。本平台雖提供多種程式語言作答。然而使 用不同的語言撰寫程式,可能會有許多內建函數、功能、記憶體使用量以及執行效 能上差異,並可能因此導致個別語言有特定優勢。為了盡力消除語言之間的差異,
以維持比賽之公平性,題目設計時將會盡力確保對於本競賽所開放使用之各種語言 而言,均存在至少一種能獲得滿分的解答程式。但不得因特定語言導致之解答難易 度差異而提出額外要求 (包括但不限於加分、延長作答時間等)。
2. 各題目之輸出比對與計分方式、編譯器與程式語言、執行時間限制、記憶體空間限制、
原始碼檔案大小限制與其他資源限制等,以評測系統所公布之設定為主。在滿足上述條 件限制情形下,不限制參賽者必須採用題目提及或特定解法作答。
3. 各題之測試資料分組,其評分以該組測試資料之配分佔該題總分之百分比計算,若有不 能整除者,得視情況捨去或進位到整數位。若各組測試資料均得滿分者,該題以滿分 計。在其他情況下,該題之總得分為各組測試資料得分對其所佔權重百分比之加權總 和,並得視情況捨去或進位到整數位,以解題系統為準。若有得分同分比序之必要時,
除系統預設排序方式外,亦得由評審參酌各難度題目之得分比例、小數部分及最後作答
第一題:鑽石行動 (國中組)
題目內容:
給定一個正整數n,請輸出大小為 n 的菱形,格式如範例輸出所示,總共2𝑛 − 1列。
輸入說明:
輸入的第一列為正整數n,至多為 100。
輸出說明:
請輸出大小為n 的菱形,格式如範例輸出所示。
請勿輸出多餘的空白與空列。
範例輸入一: 範例輸入二: 範例輸入三:
1 2 3
範例輸出一: 範例輸出二: 範例輸出三:
*
**** *
* ***
*****
***
*
範例說明一: 範例說明二: 範例說明三:
總共輸出 1 列。 總共輸出 3 列。 總共輸出 5 列。
評分說明:
正式評分所使用的測試資料共分為6 組。
國中組:每一組測試資料佔1 分,滿分 6 分。
第二題:長圓周率 (國中組)
題目內容:
圓周率π 是數學中的重要常數,其定義為:圓的圓周與直徑的長度比率。如果採用電 腦計算圓周率的值,則可以輕鬆的算到小數點一百位以後,其值如下:
3.141592653589793238462643383279502884197169399375105820 9749445923078164062862089986280348253421170679 …
根據上面所列的數值,請寫一個程式能讓使用者輸入圓周率小數點以後的位數,然後 輸出圓周率到該位數的值。
輸入說明:
輸入的第一列為整數N,表示請你輸出圓周率的值到小數點以下第幾位(後面的位數採 無條件捨去)。如果 N = 0 表示請你輸出到整數部分即可,不要輸出小數點。
輸入資料中,0 ≤ N ≤ 50。
輸出說明:
請輸出一列,表示圓周率到該位數的值,中間不含任何空白。
範例輸入一:
0
範例輸出一:
3
範例輸入二:
1
範例輸出二:
3.1
範例輸入三:
2
範例輸出三:
3.14
範例輸入四:
4
範例輸出四:
3.1415
評分說明:
正式評分所使用的測試資料共分為10 組。
國中組:每一組測試資料佔1 分,滿分 10 分。
第三題:魔數反串 (國中組、高職組)
題目內容:
給定一個字串,固定使用魔數7,表示每次反轉 7 個連續字元,隔 7 個連續字元之後 會繼續反轉後續7 個連續字元,依此類推。也就是說,第 1~7 個字元會反轉,第 8~14 個字 元不反轉,第15~21 個字元會反轉,第 22~28 個字元不反轉,依此類推。
如果需要反轉的字串在結尾未滿7 個字元,請只反轉存在的部分字串。
輸入說明:
輸入總共只有一列,表示題目給定的字串,由阿拉伯數字與英文大小寫組成,長度不 超過1000。
輸出說明:
請按照題目的規則輸出完成後的字串,長度與題目給定的原字串相同。
範例輸入一:
abcdefg 範例輸出一:
gfedcba
範例輸入二:
2522552225 範例輸出二:
2552252225
範例輸入三:
12
範例輸出三:
21
範例輸入四:
abcdefghijklmnopq 範例輸出四:
gfedcbahijklmnqpo
評分說明:
正式評分所使用的測試資料共分為6 組。
國中組:每一組測試資料佔2 分,滿分 12 分。
高職組:每一組測試資料佔1 分,滿分 6 分。
第四題:排一下隊 (國中組、高職組)
題目內容:
給定一群正整數。
定義對這群整數的
k
值為這群整數的個數除以 3 的整數部份(無條件捨去)。請先找出這群整數有幾個,並計算
k
值。接著請依照輸出說明中的敘述輸出計算 結果。輸入說明:
輸入一列正整數,相鄰正整數之間以一個空白隔開,且數值不超過 10000。
這些正整數至少有 3 個,且不超過 100 個。
輸出說明:
請輸出
k
值、所有整數中第k
小的整數、所有整數中第k
大的整數、第k
小的整數 加第k
大的整數的和。相鄰整數之間均以一個空白隔開。
範例輸入一: 範例輸入二: 範例輸入三:
1 2 3 4 5 6 15 98 2 33 8 62 71 1 3 5 7 9 11 13 15 17 19
範例輸出一: 範例輸出二: 範例輸出三:
2 2 5 7 2 8 71 79 3 5 15 20
範例說明一: 範例說明二: 範例說明三:
有 6 個數字,所以
k
值為 2,第 2 小的數字為 2,第 2 大的 數字為 5,總和是 7。
有 7 個數字,所以
k
值為 2,第 2 小的數字為 8,第 2 大的 數字為 71,總和是 79。
有 10 個數字,所以
k
值為 3,第 3 小的數字為 5,第 3 大的數 字為 15,總和是 20。
評分說明:
正式評分所使用的測試資料共分為6 組。
國中組:每一組測試資料佔2 分,滿分 12 分。
高職組:每一組測試資料佔1 分,滿分 6 分。
第五題:精靈遊戲 (國中組、高職組)
題目內容:
今天小明在上電腦課時偷玩小精靈,於是他想「我可不可以 在程式裡面寫出一個小精靈呢?」你願意幫他完成她的心願嗎?
小精靈走法如右圖所示:矩陣的最左上角為起點 0;最左下 角為終點 6 (依照輸入中給定的值而定)。依照著上下左右的數 字,從未走過的數值中找最小值走下去,直到走到終點數值為 止。
如果走得到終點數值,請輸出總共走了幾步。若走不到終點數值,則請輸出 Game Over!!
。
輸入說明:
輸入的第一列為正整數N,表示矩陣的大小為𝑁 × 𝑁。
接著輸入的N 列依序表示矩陣中從上到下每一列的值,每一列均有𝑁個整數,表示矩 陣該列從左至右每一個數值,數值以一個空白分隔。
接著輸入共有一列,為正整數M,表示遊戲的終點數值,在 1 至 𝑁 × 𝑁 − 1 之間。
矩陣中的所有整數均在0 至 𝑁 × 𝑁 − 1 之間且不重複。
矩陣的最左上角必定為起點0。
輸出說明:
請輸出一列,包含一個整數,表示輸出走到終點數值總共走了幾步,但若走不到終點 數值則請輸出 「Game Over!!
」 (不含引號)。
範例輸入一:
4
0 1 4 3 10 12 11 15 2 5 7 9 6 8 14 13 6
範例輸出一:
9
範例輸入二:
3
0 7 6 1 4 3 2 5 8 6
範例輸出二:
6
範例輸入三:
5
0 4 3 2 5 1 6 9 8 7
13 14 19 17 20 21 24 22 11 12 16 18 23 15 10 24
範例輸出三:
Game Over!!
評分說明:
正式評分所使用的測試資料共分為6 組,其中𝑁分別為 2, 3, 4, 4, 4, 5。
國中組:每一組測試資料佔2 分,滿分 12 分。
高職組:每一組測試資料佔2 分,滿分 12 分。
第六題:戰地求生 (高職組)
題目內容:
在戰場中,一個人可以攜帶的彈藥重量是有限的,再加上彈藥種類很多且殺傷力也不 盡相同。為了能在有限的負載量下,發揮最大化的彈藥殺傷力,請同學幫忙撰寫程式計算 在不同彈藥種類組合及個人最大負載重量下的最佳解。
輸入說明:
輸入的第一列依序為二個正整數N、M,以一個空白分隔,表示總共有 N 種彈藥,且 個人最大負載重量是M,每種彈藥的攜帶數量沒有特別的限制。
彈藥種類N 不超過 10 種,且個人最大負載重量 M 不超過 1000。
接著共有N 列,每列有二個正整數,以一個空白分隔。每列表示一種彈藥,其中第一 個正整數表示彈藥的重量,第二個正整數表示彈藥的殺傷力。
其中每顆彈藥的重量至多為100,且每顆彈藥的殺傷力不超過 10000。
輸出說明:
請輸出一列,包含一個整數,表示所攜帶的所有彈藥的總殺傷力的最大值。
範例輸入一:
2 8 4 450 5 570 範例輸出一:
900
範例輸入二:
2 10 4 450 5 570 範例輸出二:
1140
範例輸入三:
2 12 4 450 5 570 範例輸出三:
1350 範例說明一:
兩類彈藥,最大負載為 8 單位重量。因此選擇攜帶兩顆第一種彈藥,每顆彈藥的重量 為4,殺傷力為 450,兩顆彈藥的總殺傷力,且總重量 8 不超過個人的最大負載重量。
評分說明:
正式評分所使用的測試資料共分為4 組。
高職組:每一組測試資料佔3 分,滿分 12 分。
第一組測試資料滿足彈藥種類N 不超過 3 種。
第二組測試資料滿足彈藥種類N 不超過 5 種。
第三組測試資料滿足彈藥種類N 不超過 8 種。
第四組測試資料滿足彈藥種類N 不超過 10 種。
第七題:數正整數 (國中組、高中組、高職組)
題目內容:
小朋友在班上吵吵鬧鬧,老師非常生氣,於是命令小朋友罰寫:從正整數1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21 …… 這樣依序寫下去,無窮無盡,天荒 地老。如此一來,老師就可以輕鬆得到難得的安寧了。
想著想著,老師感到非常好奇:雖然想也知道不可能,但如果小朋友們會乖乖一直寫 下去,並且只看小朋友寫下的連續阿拉伯數字部分,忽略數字之間的所有分隔符號,那麼 寫起來則會長得像是123456789101112131415161718192021… 等,那麼,在這串阿拉伯數 字中,從左邊數來的第 K 個數字開始,往右邊總共取 N 位,寫出來會是什麼樣子呢?
輸入說明:
輸入只有一列,總共有兩個正整數,依序為正整數K、N,以一個空白分隔,如題意 所示。
輸出說明:
請輸出一列,總共包含恰好N 個阿拉伯數字。
範例輸入一:
5 8
範例輸出一:
56789101 評分說明:
正式評分所使用的測試資料共分為8 組。
高中組:每一組測試資料佔1 分,滿分 8 分。
高職組:每一組測試資料佔2 分,滿分 16 分。
國中組:每一組測試資料佔2 分,滿分 16 分。
第1 組測試資料滿足 K ≤4, N ≤4。
第2 組測試資料滿足 K ≤8, N ≤8。
第3 組測試資料滿足 K ≤1000, N ≤100。
第4 組測試資料滿足 K ≤106, N ≤1000。
第5 組至第 6 組測試資料滿足 K ≤109, N ≤100000。
第7 組至第 8 組測試資料滿足 K ≤1018, N ≤100000。
第八題:矩形面積 (國中組、高中組、高職組)
題目內容:
在某幸福城市的長條型空地上,已經從左到右依序架設好許多支撐物;這些支撐物的 間隔均相等,底部為地面,左右位置為整數,且寬度不計。你想要規劃一塊面積(兩側間隔 乘以高度)最大的矩形空間,且滿足下列所有條件:
• 矩形的底部必須為地面。
• 矩形的兩側均必須為支撐物。
• 矩形的高度不能超過任一側的支撐物高度。
舉例來說,如上圖所示,這些支撐物從左到右位置依序從1 至 9,其高度依序是 1, 8, 6, 2, 5, 4, 8, 3, 7,那麼面積最大的矩形空間是兩側間隔 7(從位置 2 至位置 9),高度 7 的矩形,
其面積為49。請注意本示意圖在繪製上略有誤差但實際位置間隔均相等。
請計算面積(兩側間隔乘以高度)最大的矩形空間,其面積是多少呢?
輸入說明:
輸入的第一列為正整數 N,表示總共有 N 個支撐物,這些支撐物從左到右位置依序 從 1 至 N。輸入的第二列共有 N 個正整數;兩相鄰正整數間,以一個空白分隔;依序表 示從左到右每個支撐物的高度,所有高度均不超過 1000000。
輸出說明:
請輸出一列,包含一個整數,表示面積(兩側間隔乘以高度)最大的矩形空間,其面積 是多少。請注意答案的數值範圍可能超過232。
範例輸入一:
9
1 8 6 2 5 4 8 3 7 範例輸出一:
49
範例輸入二:
7
1 2 3 4 5 6 7 範例輸出二:
12
範例輸入三:
3 1 1 1 範例輸出三:
2
範例輸入四:
6
5 4 3 1 2 5 範例輸出四:
25 評分說明:
正式評分所使用的測試資料共分為8 組。高中組:每一組測試資料佔 1 分,滿分 8 分。高職組與國中組:每一組測試資料佔2 分,滿分 16 分。
第1 組測試資料滿足 N ≤10。
第2 組測試資料滿足 N ≤100。
第3 組測試資料滿足 N ≤5000。
第九題:選舉策略 (國中組、高中組、高職組)
題目內容:要在競爭激烈的選舉中獲勝,候選人往往需要使用各種不同的策略。某島國即 將到來的選舉分為多個選區,每個選區都恰好有兩個候選人,其中一人總是由X 黨派推派 (簡稱 X 黨員),另一人則總是由 Y 黨派推派(簡稱 Y 黨員),不同選區的候選人均不會重 複。選民是指擁有投票權的民眾,這些民眾每人恰有一票且屬於恰一個選區。
在選舉日時,選區內的所有選民如果決定要去投票,則會投票給恰好一個候選人,不 會發生投無效票或同時選兩人等情形。當然,仍然可能有許多選民會因為天氣太熱或者是 天氣太冷等等重大理由而決定不去投票。最後由各選區獨立統計該選區兩候選人的得票 數,票多的贏,票少的輸。如果兩候選人的得票數不幸相等,則會抽籤決定該選區誰贏。
身為某島國X 黨的英明資訊長,你眼看著民意調查的結果節節敗退,心想著總不能坐 以待斃,於是早已透過各種方式收集了各選區所有選民的決定:分為在該選區「投X 黨 員」、「投Y 黨員」與「不去投票」三種。有了如此珍貴的資料,你決定要嘗試兩種前所未 見的新策略:
• 說服策略:對於選民 i,無論他原本的決定為何,你可以邊努力說服他,邊給他金 額A[i]的紅包,使他的決定改變為「投 X 黨員」,執行本策略需要花費 A[i]。
• 旅遊策略:對於選民 i,無論他原本的決定為何,你可以善意招待他價值 B[i]的三天 兩夜遙遠旅遊行程,恰好在投票日前一天出發且不可改動,使得選民i 投票當日人 在外地而鐵定沒有辦法去投票,執行本策略需要花費B[i]。
已知選民的決定除了對他使用上述策略以外不會有任何改變,且選民會相當忠實的配合 你精心設想的策略,對每位選民最多只能採用一種策略,也可以選擇不採用任何策略。
假設在兩候選人得票數相等的所有選區,抽籤結果都會是Y 黨員贏,給定已經由 X 黨 高層決定好之每個選區分別規定的最高總花費,並且限制不同選區的花費不可挪用,那麼 請問至多有幾個選區,會由X 黨員(X 黨派推派的候選人)贏得選舉呢?
輸入說明:
輸入的第一列依序為二個正整數N、M,以一個空白分隔,表示總共有 N 個選民,每 個選民屬於恰一個選區,總共有M 個選區,選區依序編號為選區 1 至選區 M。
接下來共有N 列,第 i 列依序為四個整數 S[i], T[i], A[i], B[i],以一個空白分隔,分別 表示一個屬於選區編號S[i]的選民,如果該選民原本的決定是「投 X 黨員」,則 T[i] 為 0;
如果該選民原本的決定是「投Y 黨員」,則 T[i] 為 1;如果該選民原本的決定是「不去投 票」,則T[i] 為 2。而 A[i], B[i] 分別表示對選民 i 執行說服策略或旅遊策略所需的花費。
接下來共有M 列,每列包含一個整數,依序表示選區 1 至選區 M 的最高總花費。
對一個選民執行策略的花費,及每個選區的最高總花費,均為至多109的非負整數。
輸出說明:
請輸出一列,包含一個整數,表示至多有幾個選區,會由X 黨員(X 黨派推派的候選 人)贏得選舉。
範例輸入一:
3 2
1 0 10 20 2 0 10 20 1 2 10 20 0
0
範例輸出一:
2
範例輸入二:
3 1
1 1 11 3 1 1 12 4 1 1 13 5 20
範例輸出二:
1
評分說明:
正式評分所使用的測試資料共分為12 組。
高中組:每一組測試資料佔1 分,滿分 12 分。
高職組:前4 組測試資料各佔 4 分,滿分 16 分。
國中組:前4 組測試資料各佔 4 分,滿分 16 分。
第1 組至第 3 組測試資料滿足 M ≤ N ≤100。
第4 組至第 6 組測試資料滿足 M ≤ N ≤5000。
第7 組至第 9 組測試資料滿足 M ≤ N ≤100000。
第10 組至第 12 組測試資料滿足 M ≤ N ≤300000。
第十題:陌生三人 (高中組、高職組)
題目內容:
你從戰場上抓到了好多敵軍,這些敵軍已經依序編號,而且你也已經對他們進行了一 番非常嚴謹的身家調查 ── 每一位敵軍認識的所有其他敵軍編號。在敵軍中,認識的關係 必定是互相的,也就是說「A 認識 B」若且唯若「B 認識 A」。
你想要分派一些苦差事給他們做,但為了降低這些敵軍集體反抗的機會,你想要先找 出所有由恰三個敵軍組成的組合,滿足這三個敵軍中至少有兩人互不認識。
輸入說明:
輸入的第一列依序為正整數N 與整數 M,以一個空白分隔,表示敵軍總共有 N 人,編 號從1 至 N,且總共有 M 組二人互相認識的關係。
輸入接下來共有𝑀列,每一列為遞增之兩個相異正整數,以一個空白分隔,表示一組 互相認識的二敵軍之編號。這𝑀列的內容不重覆,未出現的其他敵軍組合皆互相不認識。
輸出說明:
請輸出一列,包含一個整數,表示總共有多少組由恰三個敵軍組成的組合,滿足這三 個敵軍中至少有兩人互不認識的條件。請注意:答案的數值範圍可能超過231。
範例輸入一:
3 0
範例輸出一:
1
範例輸入二:
10 0
範例輸出二:
120
範例輸入三:
3 2 1 2 1 3
範例輸出三:
1
範例輸入四:
3 3 2 3 1 3 1 2
範例輸出四:
0
範例輸入五:
5 7 2 5 2 4 1 4 4 5 2 3 1 5 3 5 範例輸出五:
7 範例說明一:
敵軍編號 1, 2, 3 中任兩人皆互不認識,滿足題目所給定之條件,是由恰三個敵軍組成 的唯一組合。
範例說明三:
敵軍編號 2, 3 兩人互不認識,故敵軍編號 1, 2, 3 之組合滿足題目所給定之條件,是由 恰三個敵軍組成的唯一組合。
範例說明五:
敵軍編號組合(1, 2, 3), (1, 2, 4), (1, 2, 5), (1, 3, 4), (1, 3, 5), (2, 3, 4), (3, 4, 5)均滿足題目所 給定之條件,其他組合不符合給定的條件,故總共有7 組由恰三個敵軍組成的組合方式。
評分說明:
正式評分所使用的測試資料共分為12 組。
高中組:每一組測試資料佔1 分,滿分 12 分。
高職組:前4 組測試資料每一組佔 4 分,其他不計分,滿分 16 分。
第1 組測試資料滿足 N ≤50, M ≤100。第 2 組測試資料滿足 N ≤200, M ≤5000。
第3 組至第 4 組測試資料滿足 N ≤1000, M ≤5000。
第5 組至第 6 組測試資料滿足 N ≤5000, M ≤100000。
第7 組至第 8 組測試資料滿足 N ≤100000, M ≤100000。
第9 組至第 10 組測試資料滿足 N ≤100000, M ≤300000。
第十一題:公正比賽 (高中組)
題目內容:
為了大力推廣程式設計活動,教育機構決定舉辦風風光光的大型比賽,對 N 位參賽 選手評分後公布比賽的總排名。不巧的是,比賽主機因為遭到隕石撞擊而故障,主辦單位 非常苦惱,只好想出一個絕妙的好點子為參賽選手進行公正的排名,排名的方式如下:
1. 首先以隨機抽籤的方式為編號 1 到 N 的參賽選手產生排名,第一個抽到的選手 是第一名,第二個抽到的選手是第二名,依此類推,按照這個方式所得到每人的 名次均介於1 到 N 之間,且絕不會有排名並列(重複)或是排名遺漏的情形發生。
2. 接著必須檢查這個排名是否合理。合理的排名指的是不能有任何編號連續遞增的 三位選手,按編號從小到大依序排在連續遞增的三個名次。舉例來說,如果 6 人 的排名依序是 5, 6, 2, 3, 4, 1,那麼這個排名不合理,因為編號 2, 3, 4 的選手依序 排在第 3, 4, 5 名;而如果 6 人的排名依序是 5, 6, 2, 4, 3, 1,那麼這個排名是合 理的,因為找不到任何編號連續遞增的三位選手,按編號從小到大依序排在連續 遞增的三個名次。(連續遞增在此指相鄰且遞增的三個整數)
為了瞭解這個方法成功的機率有多大,你想要算出總共有多少種合理的排名方式。
輸入說明:
輸入的第一列為正整數N,以一個空白分隔,表示選手共有 N 人,編號 1 到 N。
輸出說明:
請輸出一列,包含一個整數,表示這N 人總共有多少種合理的排名方式,其數值除以 質數10000019 所得到的餘數。
範例輸入一:
1
範例輸出一:
1
範例輸入二:
2
範例輸出二:
2
範例輸入三:
3
範例輸出三:
5
範例輸入四:
4
範例輸出四:
21
範例輸入五:
16
範例輸出五:
3920107 範例說明一:
唯一的排名方式是此選手得到第 1 名,且此排名方式合理。
範例說明二:
有二種可能的排名方式,為二位選手依序分別得到第 1, 2 名,或二位選手依序分別得 到第2, 1 名且此排名方式合理。
範例說明三:
抽籤後有六種排名方式,除了二位選手依序分別得到第 1, 2, 3 名之排名方式不合理以 外,其他的五種排名方式都合理。
範例說明五:
總共有 19809901558841 種合理的排名方式,除以 10000019 所得的餘數為 3920107。
評分說明:
正式評分所使用的測試資料共分為15 組,每一組測試資料佔 1 分,滿分 15 分。
第1 組至第 6 組測試資料分別滿足 N =12; N =13; N =14; N =15; N =20; N =50。
第7 組至第 9 組測試資料滿足 N ≤100。
第10 組至第 12 組測試資料滿足 N ≤2000。
第十二題:飛彈轟炸 (高中組)
題目內容:
飛彈是戰爭中非常好用的武器,不僅著陸中心位置精準且爆炸範圍廣大,只可惜價格 相當昂貴。身為戰場的指揮官,現在你只剩下一枚飛彈可以發射,這枚飛彈的爆炸範圍是 地面上半徑固定的完美圓形。
你已經透過衛星追蹤到目標範圍內所有敵軍的二維坐標地面位置,希望找出最佳的飛 彈著陸中心的坐標位置,使得在飛彈爆炸範圍內的敵軍人數愈多愈好。我們假定敵軍不會 移動,且飛彈的著陸中心位置非常精準,不一定要在整數坐標位置上。如果敵軍的位置恰 好在飛彈的爆炸範圍的邊界,也視為在爆炸範圍內。
輸入說明:
輸入的第一列依序為二個正整數N、R,以一個空白分隔,表示敵軍總共有 N 人,且 飛彈的爆炸範圍是地面上半徑R 的完美圓形。
輸入接著總共有N 列,每列依序為二個整數 X、Y,表示一個敵軍的二維坐標位置是 (𝑋, 𝑌)。
所有敵軍的二維坐標位置不會重複,且絕對值不超過10000。
輸出說明:
請輸出一列,包含一個整數,表示在爆炸範圍內(包含邊界)的敵軍人數的最大值。
範例輸入一:
1 1 3 4
範例輸出一:
1
範例輸入二:
2 2 3 4 5 7
範例輸出二:
2
範例輸入三:
2 1 7 4 7 7
範例輸出三:
1
範例輸入四:
3 25 25 60 17 64 10 15 範例輸出四:
3
範例輸入五:
3 10000 0000 1 1
3 3 2 2
範例輸出五:
3
範例說明二:
當飛彈著陸中心的坐標位置為(4, 5.5)時,在爆炸範圍內(包含邊界)的敵軍人數為最大值 2。
範例說明三:
無論飛彈著陸中心在哪個位置,在爆炸範圍內(包含邊界)的敵軍人數至多均為 1。
範例說明四:
當飛彈著陸中心的坐標位置為(10, 40)時,在爆炸範圍內(包含邊界)的敵軍人數為最大值 3。
評分說明:
正式評分所使用的測試資料共分為15 組。
高中組:每一組測試資料佔1 分,滿分 15 分。
第1 組至第 2 組測試資料滿足 N ≤ 50, R ≤100。
第3 組至第 4 組測試資料滿足 N ≤ 100, R ≤100。
第5 組至第 6 組測試資料滿足 N ≤ 200, R ≤1000。
第7 組至第 9 組測試資料滿足 N ≤ 1000, R ≤105。 第10 組至第 12 組測試資料滿足 N ≤ 2000, R ≤108。 第13 組至第 15 組測試資料滿足 N ≤ 3000, R ≤109。
第十三題:密碼運算 (高中組)
題目內容:
小海豹不眠不休的努力工作,總算存了好多錢。為了謹慎起見,小海豹都會將他的存 款金額使用他專屬的密碼使用兩種不同的方式加密:你很好奇小海豹總共有多少存款,因 此偷偷觀察後得到了以下發現:假如小海豹的存款金額是正整數X,密碼是正整數 Y,且使 用第一種方式加密後的結果是正整數A,使用第二種方式加密後的結果是正整數 B,那麼 這四個正整數一定同時滿足以下的兩個性質:
• 𝐴 × 𝑌 除以質數 1000000007 所得的餘數是 𝑋。
• 𝐵 × 𝑌 除以質數 1000000009 所得的餘數也是 𝑋。
雖然你看到了 A 與 B 的值,而不確定 X 與 Y 究竟是多少。但經過一番調查,你發 現小海豹其實很懶,他的存款 X 與密碼 Y 都絕不會超過指定的範圍,且一定是正整數。
為了知道小海豹到底有多少存款,你想要藉由電腦的幫助,採用暴力破解法來猜出小海 豹的存款金額,也就是正整數 X 的值是多少。如果有多種符合條件的 X 值,基於小海豹 極度偷懶的事實,你會相信X 會是所有可能的值中的最小值。
輸入說明:
輸入總共有三列。輸入的第一列包含一個正整數A,小於 1000000007。
輸入的第二列包含一個正整數B,小於 1000000009。
輸入的第三列包含一個正整數N,表示已知 X 與 Y 都絕不會超過 N。
輸出說明:
請輸出一列,包含一個正整數X,表示小海豹的存款金額。如果有多種符合條件的 X 值,請輸出所有可能的值中的最小值。保證至少有一組滿足題目條件的X 值存在。
範例輸入一:
666666673 333333338 10
範例輸出一:
5
範例輸入二:
502668094 120597654 1000
範例輸出二:
781
範例輸入三:
894908829 89174661 10000 範例輸出三:
1293
範例輸入四:
1 1 1
範例輸出四:
1
範例輸入五:
6 6 10
範例輸出五:
6 範例說明一:
當小海豹的存款金額是正整數 5,密碼是正整數 3 時滿足題目條件。雖然若小海豹的 存款金額是正整數10,密碼是正整數 6 時也滿足題目條件,但非可能的存款金額最小值。
範例說明三:
當小海豹的存款金額是正整數 1293,密碼是正整數 9487 時滿足題目條件,且為可能 的存款金額最小值。
評分說明:
正式評分所使用的測試資料共分為15 組。
高中組:每一組測試資料佔1 分,滿分 15 分。
第1 組測試資料滿足 N ≤ 100。
第2 組測試資料滿足 N ≤ 500。
第3 組測試資料滿足 N ≤ 1000。
第4 組至第 7 組測試資料滿足 N ≤ 10000。
第8 組至第 11 組測試資料滿足 N ≤ 15000。
第十四題:感受排名 (高中組)
題目內容:
Meta 公司採用人工智慧引擎產生出了好多真真假假的文章,每篇文章會帶給人們不 同的好感度,有些文章的好感度是正整數,表示這篇文章帶給人們正面的影響;好感度是 負整數時,則表示這篇文章帶給人們的影響是負面的;而好感度為零則表示該文章對人們 沒有影響。
根據 Meta 公司所設計的網頁功能,這些文章已經按照固定的順序從上至下依序排 列,而使用者可以從任何一篇文章開始看,向下滑動依序看過每篇文章,直到某一篇文章 結束,至少會看到一篇文章。也就是說,假定文章總共有 N 篇,則使用者總共恰有
𝑁(𝑁+1)
2 種不同的觀看方式組合,每一種觀看方式的總感受值是所看過的每一篇文章的好感 度總和。
現在 Meta 公司已經招募到 𝑁(𝑁+1)
2 個善良且不重視隱私的使用者分別採用不同的觀 看方式,請幫幫 Meta 公司預測總感受值從大到小排在其中第 M 位的使用者,他的總感 受值是多少。
輸入說明:
輸入的第一列為正整數N,表示文章總共有 N 篇。
輸入的第二列為正整數M,如題目所示,且不超過 𝑁(𝑁+1)
2 。
輸入的第三列共有𝑁個整數,以一個空白分隔,依序表示從第 1 篇文章至第 N 篇文章 的好感度。所有好感度的絕對值均不超過 109。
輸出說明:
請輸出一列,包含一個整數,表示總感受值從大到小排在其中第 M 位的使用者,他 的總感受值是多少。
範例輸入一:
3 1 1 2 3 範例輸出一:
6
範例輸入二:
3 6 1 2 3 範例輸出二:
1
範例輸入三:
3 3 1 2 3 範例輸出三:
3
範例輸入四:
3 4 1 2 3 範例輸出四:
3
範例輸入五:
2 2
-100 100 範例輸出五:
0
評分說明:
正式評分所使用的測試資料共分為15 組。
高中組:每一組測試資料佔1 分,滿分 15 分。
第1 組至第 3 組資料滿足 N ≤100,其中一組滿足 M ≤ N,另一組均為正整數。
第4 組至第 6 組資料滿足 N ≤5000,其中一組滿足 M ≤ N,另一組均為正整數。
第7 組至第 9 組資料滿足 N ≤30000,其中一組滿足 M ≤ N,另一組均為正整數。
第10 組至第 12 組資料滿足 N ≤50000,其中一組滿足 M ≤ N,另一組均為正整數。
第13 組至第 15 組資料滿足 N ≤100000,其中一組滿足 M ≤ N,另一組均為正整數。
高雄市 110 學年度高中資訊學科能力複賽暨高職電腦程式設計比賽參考解法說明
第一題:鑽石行動 (國中組)
本題為基本語法測驗,參賽者可以使用條件判斷方式,讀取輸入並輸出正確圖形,得到 部分分數。預期的滿分解則為採用巢狀迴圈(多層迴圈)或採用語言內建字串重複語法(如 python3 語言可採用*號重複同一字串多次),並計算每一列符號重複的次數。
第二題:長圓周率 (國中組)
本題為基本語法測驗,參賽者可以使用條件判斷方式預先判斷僅輸出整數部分的狀況,
並採用語言之字串處理操作,如 python3 語言可以使用[]與:等符號直接完成取固定長度之 字串,並輸出此字串即可。
第三題:魔數反串 (國中組、高職組)
本題為基本語法測驗,參考解法為使用步進長度14 的迴圈,從頭開始依序分割字串,
每一輪擷取長度14 的字串,並反轉前 7 個字元,輸出結果即可。
第四題:排一下隊 (國中組、高職組)
本題為基本字串語法測驗及排序,多數語言已內建排序函數與字串切割函數,將字串切 割後進行排序,再依序輸出規定的結果即可。
第五題:精靈遊戲 (國中組、高職組)
本題為二維陣列之簡單應用,採用條件判斷與迴圈持續前進,直到終點為止。但參賽者 亦可採用一維陣列模擬二維陣列之上、下、左、右方格。
第六題:戰地求生 (高職組)
本題為基本之回溯法問題,可使用遞迴方式窮舉所有滿足條件的組合方式,並輸出最佳 答案,得到部分分數。參賽者亦可採用動態規劃進行優化以得到較多分數。
第七題:數正整數 (國中組、高中組、高職組)
本題為基本之字串連接問題,依次序連接所有正整數後,從特定位置取規定長度的字串 即可得到部分分數。參賽者亦可直接利用程式計算該字串特定位置從哪一個正整數開始,再 計算其切割之長度,以獲取較高之分數。
第八題:矩形面積 (國中組、高中組、高職組)
本題為基本之窮舉法問題,僅需以巢狀迴圈窮舉左界、右界、計算其間隔距離與高度,
並檢查是否符合題目規定即可得到部分分數。採用排序法,由最高的支撐物開始進行計算,
配合部分資料之預處理優化,即可獲得較高得分。
第九題:選舉策略 (國中組、高中組、高職組)
本題為基本之回溯法問題,可使用遞迴方式窮舉對所有人採用策略的組合,並計算那些 組合之花費在規定範圍內,即可通過範例測試資料。採用貪心法或動態規劃法可得較高分數。
第十題:陌生三人 (高中組、高職組)
本題為基本之巢狀迴圈(四層迴圈)問題,可先以三層迴圈窮舉所有由三人組成之組合,
並檢查其中是否有兩人不在認識的清單列表內,即可通過範例測試資料。欲得到較高之分數,
需選擇較適合的人、與較適合的二人關係進行窮舉,先計算所有由三人組成的組合數量,再 扣除所有由三人組成且互相認識的組合數量即可得到答案。
第十一題:公正比賽 (高中組)
本題為基本之排列窮舉問題,可採用回溯法窮舉規定長度的所有排列,並檢查是否有任 何三個連續位置的值為連續遞增,統計其數量後取除以 10000019 的餘數即可通過較小的範 例測試資料。欲得到較高之分數,需觀察數列的性質並推導出相關之規律。
第十二題:飛彈轟炸 (高中組)
本題為稍微複雜之計算幾何問題,參賽者必須先找出所有合適的圓心,再統計有多少敵 軍在該半徑的範圍內。由於難以有效率的窮舉所有合適的圓心,故建議改以窮舉該半徑範圍 邊緣上的任一點,再將其他點以向量有向角排序,並掃描該邊緣上的一點至該圓圓心的夾角 的可能角度,僅需處理該半徑範圍邊緣上同時有另一點之狀況。進行角度窮舉時,可同時計 算有多少敵軍在該半徑的範圍內,即可得到滿分。
第十三題:密碼運算 (高中組)
本題本來預期是較為複雜之代數優化問題,但由於評測系統之時間設定考量,僅需使用 窮舉法即可通過全部測試資料。
第十四題:感受排名 (高中組)
本題為較複雜之合併排序問題,先窮舉所有可能的答案,並以合併排序之方式檢查該答