發表文章

目前顯示的是 3月, 2024的文章

ZeroJudge C813: Summing Digits

題目敘述 本題採EOF方式收資料,每筆資料有一個正整數N,當N為0時停止收資料。要求輸出f(N)的值。 當N=1234567時, f(N) = 1 + 2 + 3 + 4 + 5 + 6 + 7 = 47 f(f(N) = 4 + 7 = 11 f(f(f(N))) = 1 + 1 = 2 所以答案為2。 範例輸入 #1 2 11 47 1234567892 0 範例輸出 #1 2 2 2 2 解題思路 使用函式的方式來處理每一個測資,收資料的時候可以使用字串來收資料並判斷字串的長度,進行計算時再把字串轉換成整數。

ZeroJudge D821: 最短路徑個數

題目敘述 本題採EOF方式收資料,每筆測資第一行有兩個正整數N和M,接下來要收一個N*M的數字陣列,0代表可以走的路,1代表是路障不能走。最後會有4個整數代表起點和終點。要求輸出從起點到終點的最短路徑個數。 範例輸入 #1 5 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 4 6 5 0 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 0 1 1 0 0 1 1 0 0 0 0 0 0 0 0 4 5 0 6 5 0 0 0 0 0 0 1 0 1 0 0 1 0 1 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 4 5 0 範例輸出 #1 70 3 6 解題思路 先預設一個N*M的二維陣列並且將裡面的資料預設為0,並且將起點位置的值變成1。和普通的BFS差不多,只是在每次判斷可以往某個方向走的時候要在新的點上加上原先目前的點中的值。另外,最後4個數字是y, x, y, x,而不是x, y, x, y,這點需注意。

ZeroJudge F671: 最短路徑

題目敘述 每筆測資第一行有兩個正整數N和M,接下來要收N行字串,每個字串分別有M個字元。如果是 '.' 的話代表是可以走的路,如果是 '#' 的話代表是路障。要求輸出從 (0, 0) 也就是最左上角的點走到最右下角的點的最短距離為何,如果無法走到的話則輸出-1。 範例輸入 #1 3 5 .#... .#.#. ...#. 範例輸出 #1 10 解題思路 可以設定一個為99999的變數用來比較最短距離,並且使用BFS的方式進行最短距離的判斷,如果跑完BFS之後變數還是99999代表無法走到這個點則輸出-1。

ZeroJudge D906: 排座位問題

題目敘述 每筆測資第一行有一個正整數M,代表換座位時的月份。第二行有一個正整數N,代表老師抽籤抽到的號碼,代表經過特殊排序法過後第一個人要坐在哪個位置,後面的人以此類推,最後一個人的下一個會跑到第一個。再來會有六行,每一行會有一個字元和兩個整數,代表學生姓名、座號、身高。如果換座位時的月份是奇數月的話以學生座號進行排序,如果是偶數月的話以學生身高進行排序,如果有身高同樣的情況則座號較小的排在前面。要求輸出換座位後第二個位置坐的人是誰 (輸出代表學生姓名的字元)。 範例輸入 #1 11 5 A 101 147 B 102 120 C 103 108 D 104 130 E 105 140 F 106 120 範例輸出 #1 D 範例輸入 #2 4 2 L 102 127 K 101 120 M 103 138 B 104 130 A 106 110 S 105 120 範例輸出 #2 A 解題思路 使用Map來存每個座號所對應到的字元,如果是使用座號排序則將座號放到陣列中後進行排序,如果是用身高排序的話則使用Pair來排序,身高放前面,座號放後面。最後輸出第二個座位上的學生姓名即可。

ZeroJudge A584: 親等關係

題目敘述 每筆資料第一行有一個正整數N,接下來會有N行,每行有若干個字串,第一個字串代表這個人是其他人的爸爸。最後一行會有兩個字串,要求輸出這兩個人是幾等親。 範例輸入 #1 3 PAM BOB TOM PAT BOB LIZ ANN PAT JIM LIZ TOM 範例輸出 #1 3 範例輸入 #2 2 BOB LIZ ANN PAM BOB TOM LIZ ANN 範例輸出 #2 2 解題思路 使用Map來存每個人他跟誰有關係,使用StringStream來切割字串,並且使用BFS來找每一次尋找人的起點。

ZeroJudge J178: 手遊廣告 (Advertisement)

題目敘述 每筆資料第一行有兩個正整數M和A,分別代表會遇見幾個敵人和一開始的戰力值,第二行會有M個整數代表遇到的敵人戰力值。當遇到戰力值小於自己的敵人時,會將敵人的戰力值吸收,當遇到戰力值等同於或是大於自己的敵人時,遊戲結束,並輸出最後的戰力值。 範例輸入 #1 5 20 30 60 90 120 150 範例輸出 #1 20 範例輸入 #2 4 32 31 61 91 215 範例輸出 #2 215 範例輸入 #3 3 10000 10 20 30 範例輸出 #3 10060 解題思路 使用一個布林值確認還需不需要做戰力值的判斷。

ZeroJudge D155: 序章-永夜抄-A

題目敘述 本題採EOF方式收資料,每筆資料會有兩個字串,分別代表「紫」和「靈夢」所出的拳,當收到Game Over的時候停止收資料,並且輸出誰贏得場次比較多,如果紫勝利則輸出「螢火的蹤跡」,反之則輸出「悲慘的籌措起香油錢」。每一次收資料也需輸出這一局是誰勝利。 範例輸入 #1 Scissors Stone Paper Stone Paper Stone Scissors Paper Game Over 範例輸出 #1 靈夢獲勝 紫獲勝 紫獲勝 紫獲勝 螢火的蹤跡 解題思路 將某一個人的勝利條件設為if,else就會是另外一個人勝利。

ZeroJudge J536: 不穩定的礦石 (Ore)

題目敘述 每筆測資第一行有兩個正整數N和A,代表有幾個礦石及最強礦石的吸收力。第二行有N個整數代表每一個礦石的能量。最強礦石的能量最高,他可以吸收左邊A/2數量的礦石和右邊A/2數量的礦石,屆時被吸收的礦石能量會歸零。當某一邊的礦石量沒有達到A/2,最強礦石則會在另外一邊將剩餘的數量一併吸收。 範例輸入 #1 3 2 1 5 1 範例輸出 #1 7 0 範例輸入 #2 7 6 22 73 96 100 99 34 14 範例輸出 #2 438 0 範例輸入 #3 5 2 100 1 2 3 5 範例輸出 #3 103 8 範例輸入 #4 6 4 31 26 95 38 57 1612 範例輸出 #4 1828 31 範例輸入 #5 9 4 1 2 55 3 8 7 1 5 25 範例輸出 #5 69 38 範例輸入 #6 9 6 1 2 55 3 8 7 1 5 25 範例輸出 #6 77 30 解題思路 當某一邊的礦石數量不夠時,先宣告一個變數預設為A/2,吸收一個礦石就將變數-1,吸收另外一邊的礦石時將剩餘的變數加到迴圈終止範圍即可。需要注意的是記憶體區段錯誤,可以先進行範圍判定看看是不是有超出陣列範圍。

ZeroJudge E507: Common Permutation

題目敘述 本題採EOF方式收資料,每筆資料有兩行字串A和B,要求輸出A和B重複的字元 (需經過排序),如果有同個字元出現超過一次,出現幾次就輸出幾次這個字元。 範例輸入 #1 pretty women walking down the street 範例輸出 #1 e nw et 解題思路 使用Map來紀錄A的有哪些字元,再跑B的For迴圈看這個字元有沒有在A有出現過,如果有的話就在答案的Map裡面紀錄,並且將A的Map減1。之後使用Auto跑答案Map的For迴圈輸出字元即可。

ZeroJudge A249: Dropping Balls

圖片
題目敘述 每筆測資第一行有一個正整數N,接下來會有N行,每行有兩個正整數D和L,分別代表要跑幾層及有幾顆球。當球遇到非終端節點時,可能往左子樹跑,也可能往右子樹跑,如此直到這顆球到達終端節點(也就是樹葉)為止。至於在非終端節點時球該往左或往右的決定乃是由2個值 true, false 來控制的。如果這非終端節點的現在的值為 false,則球來的時候會往左子樹走,但是這個值會變為 true。如果這非終端節點的現在的值為 true,則球來的時候會往右子樹走,但是這個值會變為 false。一開始時所有非終端節點的值均為 false。要求輸出最後會跑到的節點位置。 範例輸入 #1 5 4 2 3 4 10 1 2 2 8 128 範例輸出 #1 12 7 512 3 255 解題思路 跑一個D的For迴圈,當L是偶數時就是往右走 (目前位置*2+1),然後L/=2。如果L是奇數的話就是往左走 (目前位置*2),然後L = L/2+1。輸出最後的位置即可。

ZeroJudge A541: 字典

題目敘述 每筆測資第一行有一個正整數N,接下來會有N行,每行有一個不含空格的字串,代表已經背 過的單字,接下來會有一個正整數Q,接下來有Q行,每行有一個不含空格的字串,要求輸出這個字串是否已經背過/出現過。 範例輸入 #1 4 henry john mary cindy 5 andy cindy vicky leo leo 範例輸出 #1 no yes no no yes 解題思路 使用Map判斷每一個字串是否有出現過,需要注意的是,在判斷Q個字串時,有可能會有重複出現相同字串的情況,這種情況下因為已經有出現過一次,就算這個字串沒有出現在N個字串中第二次詢問時也要輸出yes因為已經出現過了。

ZeroJudge A251: 假費波那契數

題目敘述 每筆測資第一行有一個正整數T,接下來會有T行,每行會有一個正整數N和4個正整數S[0]~S[3],將數列延伸至長度為N的數列,S[4] (含) 之後的算法是:S[i] = S[i-4] + S[i-1]。要求輸出延伸後的數列的中位數 (N保證為奇數)。 範例輸入 #1 2 5 3 2 4 1 7 3 2 4 1 範例輸出 #1 3 4 解題思路 將資料輸入並運算至數列長度為N之後進行排序並輸出陣列中第N/2的位置。

ZeroJudge N327: The Tower of Names

題目敘述 每筆測資第一行有一個正整數N,接下來會有N行,每行會有一個包含空格的字串,代表一個人名。要求將所有字串依長度由短到長進行排序後輸出,如果有長度一樣的字串,則使用字母順序做排序。 範例輸入 #1 5 Alexander Smith Mia Johnson Benjamin Lee Isabella Chang Oliver Taylor 範例輸出 #1 Mia Johnson Benjamin Lee Oliver Taylor Isabella Chang Alexander Smith 範例輸入 #2 4 Ethan Baker April Adams Jacob White Emily Clark 範例輸出 #2 April Adams Emily Clark Ethan Baker Jacob White 解題思路 將N進行輸入後要先進行一次無用的getline,這樣之後的getline才會都收得到資料。可以使用Map<int, vector<string>>來紀錄每一個長度的字串,將新的字串加入Vector之後再使用Sort來做字母排序。輸出時可以使用Auto來跑Map的For迴圈,這樣只會跑到已經有設定資料的Map值,再把Vector中的字串輸出即可。

ZeroJudge F579: 購物車

題目敘述 每筆測資第一行有兩個正整數a和b,第二行會有一個正整數N,接下來會有N行,每行有若干個非0的整數,當輸入的數字為0時停止收資料換下一行。當數字為正數時,代表將編號為此數字的商品放入購物車,當數字為負數時,代表將編號為此數字*-1的商品拿出。要求輸出有幾個購物車在最後同時有a和b兩個商品。 範例輸入 #1 1 8 5 1 8 0 5 6 0 2 7 0 8 1 0 33 22 0 範例輸出 #1 2 範例輸入 #2 3 9 2 3 9 -3 3 9 0 3 3 -3 -3 9 0 範例輸出 #2 1 解題思路 收購物車資料的時候可以用EOF,可以用Map來紀錄商品的進出,最後判斷a和b在Map中的值有沒有大於0即可。

ZeroJudge G497: 電梯 (Elevator)

題目敘述 每筆測資第一行有一個正整數N,第二行會有N個正整數代表電梯每次抵達的樓層,電梯最一開始會在第一層樓 (不包含在測資中)。電梯往上一層樓需要花3度的電,往下一層樓需要花2度的電。要求輸出總共需要花費多少度的電。 範例輸入 #1 4 4 5 6 7 範例輸出 #1 18 範例輸入 #2 7 8 4 5 2 10 4 6 範例輸出 #2 80 範例輸入 #3 8 21 19 17 15 13 11 9 7 範例輸出 #3 88 解題思路 可以先宣告一個電梯目前位置的變數,預設為1,每一次收到樓層資料的時候跟目前位置做比較,如果電梯在往上的話就是答案 += 新的樓層-目前樓層再乘3,如果是往下就是答案 += 目前樓層-新樓層再乘2,當然也可以使用abs直接做一模一樣的減法。

ZeroJudge M702: 傑出校友票選活動

題目敘述 每筆測資第一行有兩個正整數N和M,接下來會有N行,每行會有一個不含空格的字串,代表這個人得了一票,要求輸出得票數前M名的人 (不會有同票的情況)。 範例輸入 #1 10 3 Peter James John John James James Peter Peter Peter Paul 範例輸出 #1 Peter James John 解題思路 使用Map來紀錄每個人的得票數,再來使用Auto來跑Map的For迴圈,將Map中的值改用Pair<int, string> (倒過來) 的方式存到另外一個陣列中。將陣列Sort過後將陣列位置最後M個資料做輸出,有可能M會比N還要大,這樣會在跑For迴圈的時候造成記憶體區段錯誤,所以For迴圈的終止條件可以寫成 max(0, 陣列長度-M),這樣如果M比N大造成終止條件為負數時,終止條件會改成0避免記憶體區段錯誤。

ZeroJudge F174: 蛋糕(Cake)

題目敘述 每筆測資第一行有兩個正整數N和K,第二行會有N個整數,分別代表蛋糕的N個區塊。要求輸出如果任意從蛋糕中切取出0~K個區塊,最大的區段和是多少 (如果取任何東西都是負的則可以不要取輸出0)。 範例輸入 #1 7 3  3 7 -1 9 2 2 1  範例輸出 #1 15 範例輸入 #2 5 4  -3 -4 -5 -6 -7  範例輸出 #2 0 範例輸入 #3 10 4  1 -5 7 2 5 -2 6 3 0 2  範例輸出 #3 14 範例輸入 #4 10 5  10 -3 -5 9 -5 -6 10 7 -20 16 範例輸出 #4 17 範例輸入 #5 10 5  10 -3 -5 9 -5 -6 10 7 -20 18 範例輸出 #5 18 解題思路 將前綴和存到陣列中之後跑For迴圈判斷每一個數字減掉前K個數字的最小值有沒有比目前最大值 (答案) 還要大,可以使用線段樹來紀錄每一個區段的最小值來防止超時。另外,在進行線段樹搜尋的時候也可以在函式中判斷目前For迴圈中跑到的數字減掉目前節點的值是否有大於答案,如果小於等於的話可以直接return函式節省時間。計算前綴和及計算答案的時候可以使用Long Long Int來防止超過範圍。

ZeroJudge E578: Decode the Mad man

題目敘述 本題採EOF方式收資料,每筆資料有一個包含空格的字串,要求輸出每一個字元在鍵盤上往左移動兩格之後的字元 (空格不算,英文字母輸入輸出皆為小寫)。 範例輸入 #1 k[r dyt i[o p '[nt ]y[jyd. 範例輸出 #1 how are you i love program 解題思路 使用Map來紀錄每一個字元的對應值。單引號是用 \' 來表示,反斜線則是 \\。

ZeroJudge A286: 難道這就是命中注定

題目敘述 本題採EOF方式收資料,每筆資料第一行有三個正整數代表主角的出生年、月、日。第二行會有一個正整數N,代表有幾個追求者正在追求主角。接下來會有N行,每行有三個正整數代表各個追求者的出生年、月、日。要求輸出哪個追求者的「特別數」和主角的「特別數」最為相近 (如果有相同特別數的情況則輸出較為前面的追求者),追求者的編號依序為1到N-1。 特別數計算方式:將出生年、月、日的各個位數的數字相加,並將得到的和執行一樣的動作,直到相加的和是個位數為止。 例:1990年9月28日出生,特別數就是2 1 + 9 + 9 + 0 + 9 + 2 + 8 = 38 3 + 8 = 11 1 + 1 = 2 範例輸入 #1 1990 9 28 1 1992 4 1 1991 10 15 2 1992 4 1 1992 3 2 範例輸出 #1 1 1 解題思路 使用字串來收出生的年、月、日。判斷相差值的時候可以使用小於這樣子就不會有相同相差值需要進行判斷的情況。

ZeroJudge E624: All in All

題目敘述 本題採EOF方式收資料,每筆資料有兩個字串a和b,要求輸出是否可以透過刪減b中的字元來讓a等於b。 範例輸入 #1 sequence subsequence person compression VERDI vivaVittorioEmanueleReDiItalia caseDoesMatter CaseDoesMatter 範例輸出 #1 Yes No Yes No 解題思路 跑第二個字串的For迴圈然後設定一個Count的變數 (預設為0),當第二個字串的第i個字元等於第一個字串的第Count個字元時,Count++。最後判斷Count是否等於第一個字串的長度即可。

ZeroJudge E925: 學號檢查

題目敘述 每筆測資第一行有一個正整數N,接下來會有N行,每行會有一個由四個字元所組成的字串。接下來會有10行,每行會有一個由9個字元所組成的字串,要求輸出每一個字串是否可以通過驗證,並且輸出驗證失敗率。 驗證方式: 1. 第一個字元為 'B' 2. 第二和第三個字元為數字 3. 第四到七個字元在收N行資料的時候有出現過 4. 最後兩個字元為數字 範例輸入 #1 76 0000 1000 1010 1011 1020 1030 1040 1050 1060 1070 1090 2000 2010 2020 2030 2040 2070 2080 2090 3000 3021 3022 3023 3030 3050 3100 4000 4010 4020 4030 4031 4040 4060 4080 4081 4090 4120 5000 5010 5020 5040 5050 5070 5080 6000 6010 6020 6030 6050 6060 6070 6080 6090 6100 6110 6120 6130 7000 7011 7012 7020 7030 7040 7050 8000 8010 9000 9010 9020 A000 A011 A012 A013 B000 B010 B020 B00100000 R00100000 BA0100000 B00101300 B001000A0 B09902005 B06A01233 B12701256 B80310020 B98901030 範例輸出 #1 Y N N N N Y Y Y Y Y 0.4 解題思路 可以使用Map來判斷中間四個字元是否有出現過,輸出失敗率時如果沒有驗證失敗要輸出0而不是0.0,如果全部都失敗要輸出1而不是0.10或1.0。

ZeroJudge C012: Tell me the frequencies!

題目敘述 本題採EOF方式收資料,每筆資料有一行字串 (字串中會有空格),要求輸出每一個字元出現的次數,字元的表示方式要用Ascii Code的方式輸出,每筆資料輸出中間要空一行。輸出的順序由出現次數小到大做輸出,如果有出現次數相同的字元,優先輸出Ascii Code較大的字元。 範例輸入 #1 AAABBC 122333 範例輸出 #1 67 1 66 2 65 3 49 1 50 2 51 3 解題思路 因為會有空格所以要用Getline來做輸入,可以使用Map來紀錄每一個字元出現的次數。做完次數的判斷之後使用Auto跑Map的For迴圈,並且再建立一個存答案的Map,Key是出現的次數,值是一個Vector用來存多個字元並且做排序。每次將答案Map的Vector進行Assign到一個暫存Vector上並且將目前的字元做Push_Back到這個暫存的Vector中,然後進行Sort的排序,最後將暫存的Vector重新Assign回答案Map中的值。最後一樣用Auto跑答案Map的For迴圈,裡面再跑Map值中的Vector的For迴圈,輸出字元的Ascii Code即可。

ZeroJudge A870: List Maker

題目敘述 本題採EOF方式收資料,當資料的第一個字串為SHOW時,停止收資料並輸出陣列中的所有資料。字串會有三種指令: 1. ADD: 將字串放到陣列的最後面 2. INSERT: 將字串放到特定字串的前面 3. REMOVE: 將特定字串刪除 範例輸入 #1 ADD NEVER ADD COLLAR INSERT CAT COLLAR ADD DOG ADD SCARES INSERT ANYTHING CAT REMOVE CAT INSERT THAT SCARES REMOVE COLLAR INSERT WEAR ANYTHING REMOVE DOG ADD CAT INSERT YOUR CAT SHOW 範例輸出 #1 NEVER WEAR ANYTHING THAT SCARES YOUR CAT 解題思路 可以利用Vector的Push_Back來處理ADD這個動作。INSERT可以開一個For迴圈,把原本陣列的東西放到一個新的陣列,並且判斷目前的資料是否為要插入的資料,如果是的話就將指定的資料先Push_Back再將原本這個位置的資料做Push_Back,REMOVE的道理也是和INSERT一樣。INSERT和REMOVE完之後可以使用Assign將新的陣列複製到舊的陣列上。

ZeroJudge E614: The Lazy Lumberjacks

題目敘述 每筆測資第一行有一個正整數N,接下來會有N行,每一行有三個正整數,代表一個三角形的三個邊長。要求輸出每一組邊長是否可以拼成一個三角形,如可以輸出OK,反之則輸出Wrong!!。 範例輸入 #1 6  1 2 3 3 2 5 3 4 5 6 6 1 3 3 3 7 3 10 範例輸出 #1 Wrong!!  Wrong!! OK OK OK Wrong!! 解題思路 任意兩邊長的和要大於第三邊才能是三角形,可以將三個數字排序過後將最小的兩個數字加起來看是否大於最大邊長,這樣就不需要每種組合都要判斷。

ZeroJudge F707: 幸運 7 (Lucky Seven)

題目敘述 本題採EOF方式收資料,每筆資料有一個正整數N,當N=0時停止收資料。要求輸出輸入數列中的「最大值」,判斷方式如下: 1. 如兩個數字一個可被7整除一個不可被7整除,則可被7整除的數字「較大」。 2. 如兩個數字都可被7整除,則除以70後的餘數較大者「較大」。 3. 如兩個數字都不可被7整除,則除以77後的餘數較小者「較大」。 4. 如有取餘數的數值相同的情況,則較大值為數列中較前面的值。 範例輸入 #1 7 14 28 0 範例輸出 #1 28 範例輸入 #2 7 77 777 0 範例輸出 #2 7 範例輸入 #3 52 140 0 範例輸出 #3 140 範例輸入 #4 15 16 68 0 範例輸出 #4 15 解題思路 第一個收的數字可以存在一個Max的變數中,之後再做EOF,一個一個和Max變數比較,比較餘數大小時需使用大於等於或小於等於,這樣才可以將較前面的數字設為目前最大值。

ZeroJudge F634: 士兵歸來

題目敘述 每筆測資第一行有兩個正整數N和M,N代表一開始有幾個人上了戰場,接下來會有M行,每行代表一個戰後登記活著的士兵,會有一個字串 (士兵名稱) 和兩個正整數 (代表軍種和軍階),會有重複登記的情況 (同名、同軍種、同軍階視為同一個人)。要求輸出各軍種和軍階存活的人數和存活率 (四捨五入至小數點第一位),輸出格式請參照輸出範例。 範例輸入 #1 15 10 ABC 1 2 ABC 2 1 ABC 2 1 ACD 3 3 ACD 1 2 ACD 1 1 BBC 2 1 BBC 1 2 BBC 1 2 BBE 3 3 範例輸出 #1 navy:4 army:2 air:2 officer:3 sergeant:3 soldier:2 survival rate: 53.3% 解題思路 使用Map來判斷每一個人是否已經登記過了,並且用Map來紀錄每一個軍種軍階的人數。

ZeroJudge D103: ISBN號碼

題目敘述 本題採EOF方式收資料,每筆資料有一個字串。字串為一本書的ISBN號碼,最後一個數字為認證碼,認證碼的計算方式為:第一個數字*1 + 第二個數字*2 + 第三個數字*3 ...以此類推到第九個數字。最後將這些數字的和除以11並取餘數,如果餘數為10則認證碼為一個大寫的英文字母X,其他就是餘數本身的數字。要求判斷輸入的ISBN認證碼是否正確,如果正確,輸出Right,否則輸出正確的ISBN號碼。輸入中的 - (減號) 可以忽略。 範例輸入 #1 0-670-82162-4 0-670-82162-0 範例輸出 #1 Right 0-670-82162-4 解題思路 使用For迴圈將減號排除,並且判斷認證碼為何。

ZeroJudge L922: 古堡長廊 (Castle)

題目敘述 每筆測資第一行有一個正整數N,接下來會有N行,每行有一個字串和一個數字。要求輸出將數字排序過後的字串 (需轉乘整數型態輸出)。 範例輸入 #1 3  ONE 368  THREE 1980  SEVEN 1624 範例輸出 #1 173 範例輸入 #2 6  FOUR 1911  SIX 1914  NINE 1782  EIGHT 573  TWO 42  FIVE 987 範例輸出 #2 285946 解題思路 使用Pair的方式將字串和年份輸入,這樣可以直接做排序。字串轉乘數字可以使用Map來做判斷。

ZeroJudge D123: B2-Sequence

題目敘述 本題採EOF方式收資料,每筆資料第一行有一個正整數N,下一行會有N個整數。B2-Sequence的條件為任意兩個數字的和 (包括自己加自己) 不會出現超過一次。要求輸出數列是否為B2-Sequence。 範例輸入 #1 4 1 2 4 8 4 3 7 10 14 5 13 14 15 16 17 範例輸出 #1 Case #1: It is a B2-Sequence. Case #2: It is not a B2-Sequence. Case #3: It is not a B2-Sequence. 解題思路 使用兩個For迴圈將所有組合的任意兩數相加,需要注意的是第二個裡面的迴圈j要等於i,要避免往回加的情況。舉例1+2等於2+1,因為要用Map來確認任意兩數的和出現過幾次,且這樣子其實只有算一次的情況,所以不能往回加,如果有任意兩數的和已經出現過的情況,可以直接Break迴圈並輸出答案。Case的部分可以在EOF外面宣告一個變數每次進來While迴圈做+1即可。

ZeroJudge F731: 老鼠的直播間

題目敘述 每筆測資第一行有一個正整數N,接下來會有N行,每行會有兩個正整數A和B,A代表這個人從時間A進入直播間,B代表這個人在時間B離開直播間。要求輸出直播間最高同時有幾個人在觀看。 範例輸入 #1 3 1 3 5 6 2 4 範例輸出 #1 2 解題思路 將進入時間跟出來時間存在不同的陣列中並排序,再來跑進入時間的For迴圈,每次人數+1,然後裡面再跑一個出來時間的For迴圈,需要有一個Start的變數 (預設為0),從Start這個位置開始判斷,如果出來的時間小於現在的進來時間,那人數就-1,直到跑到出來時間大於進來時間了才把出來時間的For迴圈Break掉,然後在這邊再判斷最大值。最後輸出得到的最大值即可。

ZeroJudge C079: Peter's Smokes

題目敘述 本題採EOF方式收資料,每筆資料有兩個正整數N和K。Peter手上有N條煙,吸完一支煙後會剩下一個煙尾巴,K個煙尾巴又可以在換成一條煙。要求輸出Peter總共可以吸幾條煙。 範例輸入 #1 4 3 10 3 100 5 範例輸出 #1 5 14 124 解題思路 使用While迴圈,每次吸一隻煙後就煙尾巴+1,每次判斷現在的煙尾巴可不可以在換成一條煙,如果沒有煙了 and 煙尾巴<K,那就中止迴圈輸出答案。