| # | Problem | Pass Rate (passed user / total user) |
|---|---|---|
| 15058 | How to Survive in the Harem |
|
| 15059 | This is the REAL Tech-Art |
|
| 15060 | Aventurine and Soulglad |
|
| 15061 | Which Plan Should I Choose? |
|
Description
妳是一位後宮中的嬪妃。
今日天氣頗好,妳在御花園散步時靈光一閃:
既然宮鬥如此凶險,何不用程式算一下自己的勝率?
於是,聰明伶俐的妳命太監蒐集了後宮中其他嬪妃的資料。每位嬪妃具有以下三項資訊:
-
代號(name):由不含空白的字串組成。
-
階級(level):
|
level |
階級 |
|
9 |
皇后 |
|
8 |
皇貴妃 |
|
7 |
貴妃 |
|
6 |
妃 |
|
5 |
嬪 |
|
4 |
貴人 |
|
3 |
常在 |
|
2 |
答應 |
|
1 |
官女子 |
-
綜合宮鬥能力(ability):一個正整數,數字越大代表宮鬥能力越強。
經過縝密的分析,妳制定了一套科學化的宮鬥淘汰制度。
每位嬪妃的 宮鬥分數(score) 為:
score = level * ability
宮鬥依照以下規則進行:
-
每一輪淘汰 score 最小的嬪妃。
-
如果有多位嬪妃的 score 相同,則淘汰 level 較小的嬪妃。
-
如果 score 與 level 皆相同,則淘汰 輸入順序較前 的嬪妃。
-
宮鬥持續進行,直到後宮只剩下最後一位嬪妃。
為了方便妳建立宮鬥勝率計算表,妳自己的 index 固定為 0,其餘嬪妃依照輸入順序編號為 1 到 n。
妳自己的宮鬥勝率(win rate)定義為:
win rate = 妳贏過的其他嬪妃人數 / n * 100%
n 為除妳之外的所有嬪妃人數,包含最後的勝者(若最後的勝者不是妳)。
如果一位嬪妃比妳更早被淘汰,就代表妳成功贏過她。
如果妳成為最後的勝者,代表妳贏過所有其他嬪妃,因此勝率為 100.00%。
例如:
假設 n = 4,共有妳與其他 4 位嬪妃參與宮鬥。若淘汰順序為:
3 4 0 1
最後的勝者為 2。
妳的 index 為 0,在妳之前被淘汰的嬪妃為 index 3 與 4,因此妳成功贏過 2 位嬪妃。
index 1 比妳晚被淘汰,而 index 2 為最後的勝者,因此這兩位皆不算被妳贏過。
所以妳的勝率為:
2 / 4 * 100% = 50.00%
請根據以上規則,計算:
-
所有被淘汰嬪妃的 index,依照淘汰順序排列。
-
妳自己的宮鬥勝率。
-
最後成功留在後宮中的嬪妃 index。
限制
本題可以使用一維陣列,但不可使用二維或更高維度的陣列。
Input
第一行包含妳自己的代號、階級與綜合宮鬥能力:
my_name my_level my_ability
第二行包含一個整數 n,代表除妳之外共有多少位嬪妃:
n
接下來 n 行,每行包含一位其他嬪妃的代號、階級與綜合宮鬥能力:
name level ability
輸入資料符合以下限制:
- 1 ≤ n ≤ 10
- 1 ≤ level ≤ 9
- 1 ≤ ability ≤ 1000
- 1 ≤ length of name ≤ 20
- 所有 name 皆為不包含空白的字串。
- 妳自己的 index 為 0,其他嬪妃的 index 按照輸入順序依序為 1, 2, ..., n。
Output
第一行輸出所有被淘汰嬪妃的 index,依照淘汰順序排列,並以一個空格分隔。
最後的勝者不包含在淘汰順序中。
Elimination order: X1 X2 X3 ...
第二行輸出妳自己的宮鬥勝率,四捨五入至小數點後兩位:
My win rate: xx.xx%
第三行輸出最後成功留在後宮中的嬪妃 index:
Harem winner: Y
Note:
- 輸出格式必須完全相符,包含空格、大小寫、標點符號與換行字元 \n。
Sample Input Download
Sample Output Download
Discuss
Description
國立清X大學藝X學院學士班的某位助教,最近正在修習計算機結構。
某天,他盯著滿頁的記憶體位址:
0xFFFFFFFF
看著看著,突然覺得哪裡不太對勁……
這不是很像色票嗎?
一查才發現,在 32-bit 系統中,記憶體位址可以使用 8 位十六進位數表示;而加入透明度(Alpha)的 RGBA 色碼 #RRGGBBAA,也正好可以使用 8 位十六進位數表示!
例如:
#FFFFFFFF
可以拆成:
FF FF FF FF
R G B A
分別代表紅色(R)、綠色(G)、藍色(B)與透明度(A),數值範圍從 00 到 FF,分別對應十進位的 0 到 255。
助教頓時覺得計算機結構親切了起來。
於是,他決定把這份感動分享給所有修習計算機程式設計的同學。
十六進位使用以下 16 個符號表示數值:
0 1 2 3 4 5 6 7 8 9 A B C D E F
其中:
-
A = 10
-
B = 11
-
C = 12
-
D = 13
-
E = 14
-
F = 15
一個 RGBA 色碼可以表示為:
#RRGGBBAA
每一個色彩通道皆由 2 位十六進位數字組成。
假設其中一個通道的兩位十六進位數字分別為 x 與 y,則其十進位數值可以使用以下公式計算:x × 161 + y × 160
也就是:x × 16 + y
Hint: 161 = 16, 160 = 1
例如,十六進位的 FF 中,F 所代表的數值為 15:
15 × 16 +15 = 240 + 15 = 255
因此:
-
#FFFFFFFF
所代表的 RGBA 數值為:
-
R = 255
-
G = 255
-
B = 255
-
A = 255
再例如,給定色碼:
#0232202A
可以拆成:
02 32 20 2A
R G B A
各通道分別計算為:
-
R = 0 × 16 + 2 = 2
-
G = 3 × 16 + 2 = 50
-
B = 2 × 16 + 0 = 32
-
A = 2 × 16 + 10 = 42
因此,此色碼所代表的 RGBA 數值為:
-
R = 2
-
G = 50
-
B = 32
-
A = 42
現在給定一組 RGBA 十六進位色碼 s,請將其中的 R、G、B、A 四個通道分別轉換成十進位數值。
Input
輸入一行,包含一組 RGBA 色碼:
s
s 的格式固定為:
#RRGGBBAA
其中:
-
第一個字元固定為 #。
-
後面共有 8 個十六進位字元。
-
每個十六進位字元皆為 0 到 9 或 A 到 F。
-
本題輸入的英文字母皆為大寫。
Output
輸出一行,依序輸出 R、G、B、A 四個通道轉換後的十進位數值,數字之間以一個空白分隔。
請務必在輸出結果後加上換行字元 \n。
例如:
255 255 255 255
Note
-
十六進位中的 A、B、C、D、E、F 分別代表十進位的 10、11、12、13、14、15。
-
每兩個十六進位字元代表一個色彩通道:#RRGGBBAA
-
若兩位十六進位數字的數值分別為 x 與 y,則其十進位數值為:x × 161 + y × 160
-
可以將色碼以 char array 儲存,再分別讀取對應位置的字元。
-
若字元 c 介於 '0' 到 '9',可以使用:c - '0' 取得其數值。
-
若字元 c 介於 'A' 到 'F',可以使用:c - 'A' + 10 取得其數值。
-
不需要使用任何內建的進位轉換函式。
Sample Input Download
Sample Output Download
Discuss
Description
砂金是星際和平公司的高管,前陣子接了蘇樂達(Soulglad)汽水的廣告代言。
有一天,他收到了公司寄來的 超 級 多 箱 蘇樂達汽水......
他覺得可以把這些蘇樂達疊成一個巨大的 汽水塔!
已知一箱汽水有 m 瓶,砂金總共收到了 n 箱,因此總共有 m × n 瓶蘇樂達。
汽水塔由下往上,每一層都比下一層少一瓶,也就是找最大的 h,使得:
1 + 2 + ⋯ + h ≤ m × n
例如一箱汽水有 5 瓶(m = 5),砂金總共收到了 2 箱(n = 2),總共有 10 瓶:
1
1 1
1 1 1
1 1 1 1
剛好四層,因為 1 + 2 + 3 + 4 = 10。
請幫砂金總監計算他的汽水塔最多可以疊幾層!
Input
請分別輸入兩個整數,每次輸入前需換行:
m
n
其中:
-
m:一箱蘇樂達的瓶數
-
n:砂金收到的箱數
Note:
- 請使用 scanf() 讀取整數輸入。
- 所有數值皆為正整數,且 m × n 不超過 int 範圍。
- 建議使用迴圈,從第 1 層開始,一層一層計算需要多少瓶蘇樂達。
Output
請依照以下格式輸出:
Aventurine can build a h-layer Soulglad tower!
其中:
-
h:最多可以疊出的汽水塔層數
Note:
-
輸出最後必須有一個換行符號("\n")。
-
請確保輸出格式完全符合。
Sample Input Download
Sample Output Download
Discuss
Description
某位大學生最近發現生成式 AI 非常方便。
寫程式、整理資料、閱讀論文、檢查作業、陪自己聊天......
不知不覺,他每個月使用的 Token 越來越多。
某天,他再次看到:
You have reached your usage limit.
他終於開始認真思考:
「我到底應該買哪個方案?」
某 AI 平台提供以下四種方案:
-
每月使用量不超過 10000 tokens:Free
-
每月使用量為 10001 ~ 50000 tokens:Plus
-
每月使用量為 50001 ~ 200000 tokens:Pro
-
每月使用量超過 200000 tokens:Touch Grass
已知使用者每個月會使用 n 個 tokens,請根據 Token 使用量,輸出對應的方案。
Input
請輸入一個整數:
n
其中:
n:使用者每個月使用的 Token 數量
Note:
- 0 <= n <= 2147483647
Output
請根據使用者的 Token 使用量,輸出最適合的方案名稱。
輸出可能為以下其中一種:
Free
Plus
Pro
Touch Grass
Note:
- 請注意不同方案的 Token 使用量限制,並正確處理方案之間的邊界值。
- 輸出最後必須有一個換行符號("\n")。
- 請確保輸出的方案名稱與格式完全符合。