UVA-10008 What's Cryptanalysis? 解題紀錄
🔗 UVA-10008 What’s Cryptanalysis?
tags: CPE49
CPE-241015
CPE-110927
雜湊表(Hash Table)
排序(Sorting)
題意
密碼分析是破解他人加密文本的過程,有時涉及對一段(加密的)文本進行統計分析。你的任務是撰寫一個程式來對給定的文本進行簡單的分析。
給定一個正整數 ,表示接下來有 行需要分析的文本。接下來的 行中可能包含任意字元(包括空白字元)。這是需要分析的文本。
你需要統計每個字母(不區分大小寫)在文本中出現的次數,並按出現次數的降序排列。如果兩個字母出現的次數相同,則按字母的字母順序排列。沒有出現的字母不應出現在輸出中。
最後輸出時,每個字母及其出現次數佔一行,字母和次數之間用一個空格隔開,且字母需要轉換為大寫。
思路:雜湊表(Hash Table) + 排序(Sorting)
根據題意,我們需要統計每個字母在文本中出現的次數,因此我們可以使用 雜湊表(Hash Table) 來統計每個字母出現的次數,並針對雜湊表的 key 和 value 進行 排序(Sorting) 。
在排序時,我們需要先以字母出現的次數進行排序,如果次數相同,則以字母的字母順序進行排序。
- 在 Python 中,我們可以使用
sorted()
函數配合lambda
表達式來實現這個排序。 - 在 C++ 中,我們可以定義一個比較函數
cmp
,並使用std::sort
來排序。
由於字母的數量只有 個,因此也可以使用陣列來統計每個字母出現的次數,但在排序時需要連同對應的下標一起排序。
複雜度分析
- 時間複雜度:,其中 是所有文本中字元的總數, 是字母的數量,本題中 。
- 遍歷所有字元,對每個字元進行檢查和更新操作,時間複雜度為 。
- 將 個出現過的字母進行排序,時間複雜度為 。由於 最多為 ,因此排序的時間複雜度實際上是常數級的。
- 空間複雜度:。
- 需要額外的雜湊表來統計每個字母出現的次數。
1 | from collections import defaultdict |
1 |
|
寫在最後
PROMPT
masterpiece, best quality, high quality, extremely detailed CG unity 8k wallpaper, extremely detailed, High Detail, vibrant colors, backlight, photo background,
(1girl, solo), Frieren, frieren, long hair, very long hair, (green eyes:1.5), grey hair, pointy ears, elf,
dress, white dress, sleeveless, sleeveless dress, jewelry, earrings, bare shoulders, parted bangs, bare arms, barefoot, bare legs, collarbone, looking at viewer, blush, sitting, closed mouth, full body, flower, water, wariza, strap slip, between legs, hand between legs, lily pad,
anime girl, sitting in water, white dress, pointed ears, floating flowers, serene, fantasy, soft lighting, dreamy atmosphere,
至少這次 CPE 還是沒有取消必考 49 題的。