• 沒有找到結果。

最長嚴格遞增子 序列演算法algo

N/A
N/A
Protected

Academic year: 2023

Share "最長嚴格遞增子 序列演算法algo "

Copied!
8
0
0

加載中.... (立即查看全文)

全文

(1)

題目

烏龜館鑰匙 tur3

Wolfram Alpha wolfram

最長嚴格遞增子 序列演算法algo

雙向佇列 deque

打烏龜 tur4

測試一

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

總分

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

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

准考證號碼: ___________

姓名: ___________

USB 號碼: ___________

下表為評分用,請勿填寫

總分

/ 250

選手簽名 評審

(2)

題目 烏龜館鑰匙

tur3

Wolfram Alpha

wolfram

最長嚴格遞增子序 列演算法algo

雙向佇列

deque

打烏龜

tur4

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

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

可執行檔 tur3.exe wolfram.exe algo.exe deque.exe tur4.exe

輸入檔 tur3.in wolfram.in algo.in deque.in tur4.in

輸出檔 tur3.out wolfram.out algo.out deque.out tur4.out

總分 50 50 50 50 50

注意事項

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

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

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

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

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

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

一、比賽途中請將程式碼上傳到http://pisces.ck.tp.edu.tw/~peng/index.php 左方工具列之校內模擬賽(需登入),比賽結束後將以最後一次上傳的程式碼為評分依 據,逾期不以計算。(注意:是上傳程式碼(.cpp)而非執行檔(.exe),請勿搞混。)

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

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

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

(3)

題目一:烏龜館鑰匙(TUR3)

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

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

你順利完成了採訪的任務,決定回去稟報國王。

經過了兩個小時的車程,你終於來到了烏龜國王的住處──烏龜館。烏龜館的守門人是 一隻紅 烏龜,由於你常常來往烏龜館,他早就認識你了。

「嘿,『你』,又來找國王了喔!」遠遠的就和你打招呼。

不過接下來他眉頭一皺,「烏龜館的鑰匙我剛才找好久都找不到……」,他接著說,「那 我們就來自己作一個鑰匙吧!」

他拿出一塊木板,長度為N。他說:「木板的每一個整數位置都可能有魔性或是靈性。你 現在要取得一個盡量長的片段,不過為了防止世界被破壞;為了守護世界的和平,那個 片段的魔性跟靈性總和要一樣大。」

「符合這個條件最長的一個片段就可以拿來製造成進入烏龜館的鑰匙了,現在開始動工 吧!」他從圍牆上拆下了一塊木板給你。

輸入說明(tur3.in)

第一行有一個正整數N,表示木板長度。

第二行有N個0或1的數字,第i個數字Ai表示位置i有無靈性(0表示沒有1表示有),

第三行有N個0或1的數字,第i個數字Bi表示位置i有無魔性(0表示沒有1表示有),

輸出說明(tur3.out)

輸出一行只包含一個數字,表示最長的可能片段有多長。

範例輸入 5

1 0 1 1 1 0 1 1 0 0

範例輸出 3

提示

對於 50%的測試資料,N <= 1,000 對於 100%的測試資料,N <= 100,000

←烏龜館和紅 烏龜

(4)

題目二:Wolfram Alpha(WOLFRAM)

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

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

你在知名的網站Wolfram Alpha輸入了一個算式,希望能稍微看一下答案長什麼樣子。

不幸的是,自動化的程式還是無法解出你想看到的答案。

於是,你決定自己寫個程式來解出x。

給定正整數a, n,請求出下列一元一次方程式的根:

不過因為答案實在太大了,所以你決定只要求出x除以m的餘數就好。

輸入說明(wolfram.in)

輸入的第一行有三個正整數,依序是a, n, m,其中n會以一個首位非0的兩進位字串表示。

輸出說明(wolfram.out) 輸出一行,為x除以m的餘數 範例輸入

5 11 1000000

範例輸出 30

提示

對於所有測資,a, m會在32-bit signed int的範圍內,n不超過2100,000(10進位) a大於1; n, m皆大於0。

※備註:其實這題原本是矩陣…不過出題者想不到題目敘述(?)所以就算了。

(5)

題目三:最長嚴格遞增子序列演算法(ALGO)

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

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

現在總共有N塊不同顏色、不同邊長的正方體積木,依序編號為1到N。堆積木時,若上方 積木的邊長小於下方積木的邊長,則堆出來的積木有穩定性。為了保證穩定性,你研發 了一個演算法:

輸入: 積木總數N, 積木塊的邊長Len[1...n], 以及處理積木塊的順序π[1...n]

輸出: 堆出來的積木的編號

Algorithm StackingBoxes(N, Len[], π[]) 1 Queue ← Empty Queue

2 for i←1 to n do

3 if Queue is empty or Len[Queue.back()]<Len[π[i]] then do 4 Queue.push( π[i] )

5 return Queue

為了盡可能讓堆出來的積木塊個數最多,你決定多隨機幾次π陣列。理論上,總有一天,

你會找到讓堆出來的積木塊數量最多的順序。然而,你發現對於你隨機出來的處理順序 π,演算法做出來的答案一定會有X塊積木;如果再把π整個顛倒過來,那得出來的答案 會有Y塊積木。請問究竟有幾種π序列能造成如此的巧合呢 ?

由於答案可能很大,所以你只要輸出數量除以M的餘數就好。

輸入說明(algo.in)

輸入的第一行依序是三個正整數N, M, T(接下來有T筆詢問)。

接下來的T行,每一行依序是兩個正整數X, Y。

輸出說明(algo.out)

對於每一筆詢問,請輸出一行,代表所有可能的個數。

範例輸入 3 10 3 1 2 2 2 2 1

範例輸出 1

2 1

提示

佔總分20%的測資,N不超過9,且T不超過10。

對於所有的測資,N不超過200,且T不超過40,000,且M不會超過230

(6)

題目四:雙向佇列(DEQUE)

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

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

雙向佇列(簡稱deque)是一種很奇妙的資料結構,這種資料結構的雙邊都可以進行push 和pop。當然,deque最好用的功能就是求區間極值,而且可以優化特定種類的DP問題。

然而,這次,你打算用deque來排序。

現在輸入依序有N個正整數,你決定一個一個把他們push進deque裡面,用你的智慧決定 該數字應該要從deque的頭放進去還是從尾放進去。最後,再從頭把deque的元素一個一 個取出來,就排序好了!多完美的線性演算法!

然而,事實證明,這個演算法有很大的瑕疵:就是這樣做出來的序列不一定是已排序的 序列。為了改進這個缺點,你決定在push的時候忽略某些數字的存在,從而使得最後在 deque中做出來的序列是已排序好、嚴格遞增的。

那剩下的事情就簡單了,就是任選N-1個數字忽略掉,剩下來的那個數字自然是已經排 序好又嚴格遞增的……但是這樣非常奇怪。於是,你決定忽略盡量少的數字,讓留下來 的數字盡量多。

那你最多可以留下幾個數字呢 ?

輸入說明(deque.in)

輸入的第一行有一個正整數N,

接下來有N行,依序給出每個要排序的數的值。

輸出說明(deque.out)

請輸出一行,代表最多可以留下幾個數字。

範例輸入 5

1 2 3 4 5

範例輸出 5

提示

佔總分30%的測資,N不超過5,000。

對於所有的測資,N不超過100,000。

要排序的值範圍會在32-bit signed int的範圍中。

(7)

題目五:打烏龜(TUR4)

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

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

你好不容易進入了烏龜館,迎在眼前的卻是一票烏龜大軍(不是大鈞,那個大鈞是一個 在房屋仲介底下生活的傳奇生物。)

領頭的烏龜下令這N隻烏龜排好陣型,準備阻擋你前往國王所在之處。

你決定使出大決──使用槌子造成的震波將烏龜擊飛,以賺取combo數以脫離包圍網。

你把整個王宮大廳化成平面直角座標系,每個烏龜都有他自己的座標(Xi,Yi),你可以在 任意地方揮下你的槌子,槌子的震波會沿著斜率=-1以及斜率=1兩條直線陰影區震去(參 見下圖),所有在陰影區內(含線上)的烏龜都會被震翻而失去抵抗力。

但是你的力氣最多只足夠你揮M下槌子,而你又希望儘快突破,所以你希望你所有槌子揮 擊的Y座標的最小值儘量大,問你最大能多大。(但所有揮擊動作只能對格子點進行。)

Source : http://armorgames.com/play/6677/epic-combo !!!

輸入說明(tur4.in)

輸入第一行含兩個正整數N,M,表示烏龜的數量跟你能揮擊的次數。

接下來有N行每行兩個數字Yi,Xi表示第i隻烏龜的座標。

輸出說明(tur4.out)

輸出只有一行包含一個數字Ymax,表示你的答案。

(8)

範例輸入 4 1 1 -1 1 3 1 4 2 6

範例輸出 -2

提示

範例測資圖:

對於100%測資,X,Y座標絕對值不超過1,000,000且皆為整數。

對於30%測資,N = 1

對於50%測資,1 <= N <= 2,000 對於100%測資,1 <= N <= 100,000

參考文獻

相關文件

趣味數學 鏡子 想像某天清晨,你在浴室裡剛刷完牙,正看著鏡中的自己。從你僅靠著洗臉槽的站立位置,你應該 可以看到你的上半身——假設你在鏡中所能看見的最低點只到達你的肚臍。 現在開始你往後退,離開鏡子,當你後退時,你能看到? 1較少的你 2同樣多的你 3較多的你 熊 一個人離開了他的帳棚,他往南走1公里,然後他往東1公里,接著往北走1公里。讓他驚訝的是,

父親:Billy,你在做什麼?你怎麼把你的零用錢從小豬撲滿裡拿出來了呢? Billy:嗨,爸爸!我正試著在網路上買東西給媽媽。我想在母親節給她個驚喜。 父親:你想買什麼呢? Billy:我已經看過某些東西了,但我還沒決定好要買什麼。 父親:有那些選擇呢? Billy:我不知道我是否要買這個新臺幣兩千五百元的別緻的錢包,還是這個兩倍貴的漂亮的手錶。