【Uva 題庫解題】C++ 個人解題筆記(一顆星選集) - part 5
【Uva 題庫解題】C++ 個人解題筆記(一顆星選集) - part 5一篇十題讓你看到爽! CPE 49 道必考題,資料來源:https://cpe.mcu.edu.tw/environment.php 41. Tell me the frequencies!PDF Source:https://onlinejudge.org/external/100/10062.pdf Zerojudge:https://zerojudge.tw/ShowProblem?problemid=c012 題目翻譯: 給定一行文字,你要找出 ASCII 字元出現的頻率。給定的行將不包含前 32 個或後 128 個 ASCII 字元。當然,行可以 \n 和 \r 結尾,但永遠不要考慮這些字元。 注意點: 不要用 cin,用 getline(),題目輸入測資可能一行含有空格。 map 用完後轉成 vector <pii>,依據題目要求做自訂排序。 範例程式碼: 2025/09/29 修改:改為若非第一組測資就輸出空行,避免 Presentations-Error。 2025/09/29 二...
【Uva 題庫解題】C++ 個人解題筆記(一顆星選集) - part 4
【Uva 題庫解題】C++ 個人解題筆記(一顆星選集) - part 4一篇十題讓你看到爽! CPE 49 道必考題,資料來源:https://cpe.mcu.edu.tw/environment.php 31. All You Need Is Love!Uva Online Judge:https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=1134 No Zerojudge :( 題目翻譯(From Lucky貓): IBM(International Beautiful Machines)公司發明了一種小玩意兒叫做「愛的算命機」。這台機器會回答你是否非常渴望愛情。這機器運作的情形是:請你輸入一僅含 0 和 1 的字串(稱為 S),機器自己則定義一僅含 0 和 1 的字串(稱為 L,Love 的意思)。然後機器不斷的用 S 去減 L(當然是 2 進位的減法),如果最後可以得到 S = L,代表 ...
【Uva 題庫解題】C++ 個人解題筆記(一顆星選集) - part 3
【Uva 題庫解題】C++ 個人解題筆記(一顆星選集) - part 3一篇十題讓你看到爽! CPE 49 道必考題,資料來源:https://cpe.mcu.edu.tw/environment.php 21. Symmetric MatrixPDF Source:https://onlinejudge.org/external/113/11349.pdf zerojudge:https://zerojudge.tw/ShowProblem?problemid=e513 題目翻譯: 給定一個正方形矩陣 $M$ 。這矩陣的元素為 $M_{ij} = {0 < i < n, 0 < j < n}$ 。 於本題中你要找到給定的矩陣是否對稱。 定義:對稱矩陣指的是所有元素都是非負的,且相對於矩陣中心對稱的矩陣。其他任何矩陣都被認為是不對稱的。如: 你所要做的就是找出矩陣是否對稱。給定矩陣元素的範圍為 $-2^{32} \leq M_{ij} \leq 2^{32}$ 及 $0 \leq n \leq 100$ 。 精選單字: symmetric (adj.)...
【Uva 題庫解題】C++ 個人解題筆記(一顆星選集) - part 2
【Uva 題庫解題】C++ 個人解題筆記(一顆星選集) - part 2一篇十題讓你看到爽! CPE 49 道必考題,資料來源:https://cpe.mcu.edu.tw/environment.php 11. Common PermutationPDF Source:https://onlinejudge.org/external/102/10252.pdf zerojudge:https://zerojudge.tw/ShowProblem?problemid=e507 題目翻譯: 給定由兩個小寫字母組成的字串,a 和 b,請輸出最長的小寫字母字串 x,使得 x 的某個排列是 a 的子序列,且 x 的某個排列也是 b 的子序列。 解題思路: 建立 A、B 字串的頻率表,接著 range-based for loop 判斷頻率++。 common 取最小的頻率,為啥?以下是個例子: 12(a) the(b) street 字母 a b t 1 次 2 次 s 0 次 1 次 h 1 次 0 次 e 1 次 2 次 而這個題目是要求兩個字串中...
【Uva 題庫解題】C++ 個人解題筆記(一顆星選集) - part 1
【Uva 題庫解題】C++ 個人解題筆記(一顆星選集) - part 1一篇十題讓你看到爽! CPE 49 道必考題,資料來源:https://cpe.mcu.edu.tw/environment.php 1. Vito’sfamilyPDF Source:https://onlinejudge.org/external/100/10041.pdf zerojudge:https://zerojudge.tw/ShowProblem?problemid=a737 題目翻譯: 世界知名的黑幫 Vito Deadstone 要搬到紐約了。他在那邊有個大家族,他們全部都住在 Lamafia 大街上。因為他時常要拜訪他所有的親戚,所以他想要找一間離他們很近的房子。 Vito 想最小化與他們的距離和,然後還威脅你要寫個程式幫他解決這個問題。 精選單字: avenue (n.) 大街、大道;方法、途徑、管道 relative (n.) 親戚、親屬 (adj.) 比較的;相對的 解題思路: 首先要搞懂這個距離的定義。題目給定多個門牌號碼 $s_1, s_2, …, s_r$,選定一個數...
【C++】競程筆記(BFS:廣度優先搜尋)
【C++】競程筆記(BFS:廣度優先搜尋)程式碼範例參考:NTUCPC Guide,此筆記僅為個人學習用途。 流水問題以 NTUCPC Guide 舉的例子來說的話,水流只能往上下左右流,而且是同時流,然後求每個空地格子幾秒後會有水。 具體做法是先將流水的起點定為 0 秒,之後向上下左右擴散一單位的水並 + 1 秒,注意這邊要做邊界檢查,如下圖的第三張。 Image Source:https://guide.ntucpc.org/AlgorithmTechnique/bfs/ 而在程式設計上,右上角那塊 2 是最容易犯錯的,因為我們都想說上下左右 + 1,第一次寫的時候會沒想到那塊 2 左邊跟下方都有一塊 1,最後加起來還可能會是 3,就比較不合理,這也是要在程式設計上要注意的地方。 以下是有關這個流水問題的範例程式碼(From : NTUCPC Guide | BFS): 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849// from NTUCPC...
【C++】競程筆記(DFS:深度優先搜尋)
【C++】競程筆記(DFS:深度優先搜尋)程式碼範例參考:NTUCPC Guide,此筆記僅為個人學習用途。 DFS 的前菜:八皇后問題Problem : https://zerojudge.tw/ShowProblem?problemid=i644 這題可以透過窮舉法+遞迴(回溯法:Backtracking)的方式去解。 回溯法就是窮舉+遞迴,遇到不可能或失敗的情況後會回退一步,嘗試其他可能的解,直到找到解或全部演算完畢。 八皇后問題的目標是: 在 $8 \times 8$ 的棋盤上放置 $8$ 個皇后,使得任意兩個皇后不會互相攻擊,也就是說: 任意兩個皇后不在同一列(row) 任意兩個皇后不在同一行(column) 任意兩個皇后不在同一條對角線(diagonal) 至於為什麼是這樣?可以參考這篇西洋棋規則:https://blog.udn.com/puzzlez/4342425 解法由於每列只能放一個皇后,因此可以將問題簡化為每一列放在哪一行。 在這邊開一個陣列 queens[8] 表示整個棋盤,queens[i] = j 表示第 i 列的皇后放在第 j 行。 邏輯判定每...
【C++ 筆記】模板(Templates)(下) - part 32
【C++ 筆記】模板(Templates)(下) - part 32很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 模板特製化(Template Specialization) It is possible in C++ to get a special behavior for a particular data type. This is called template specialization.From GeeksForGeeks 在 C++ 中,可以為特定資料型態賦予特殊的行為,就稱為模板特製化。 簡單來說,就是可以為特定資料型態去做不一樣的事情,如下範例: 1234567891011121314151617181920#include <iostream>using namespace std;template <typename T> void prin...
【C++ 筆記】模板(Templates)(上) - part 31
【C++ 筆記】模板(Templates)(上) - part 31很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 先搞懂泛型程式設計泛型程式設計(Generic programming),是一種程式設計的風格或範式(paradigm)。 :::info註:最大名鼎鼎的 OOP 也是一種程式設計的範式。::: 泛型允許程式設計師在強型別程式設計語言中編寫代碼時使用一些以後才指定的類型,在實例化時作為參數指明這些類型。各種程式語言和其編譯器、執行環境對泛型的支援均不同。Ada、Delphi、Eiffel、Java、C#、F#、Swift 和 Visual Basic .NET 稱之為泛型(generics);ML、Scala 和 Haskell 稱之為參數多型(parametric polymorphism);C++ 和 D稱之為模板。具有廣泛影響的1994年版的《Design Patterns...
【C++ 筆記】命名空間(Namespace) - part 30
【C++ 筆記】命名空間(Namespace) - part 30很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 可喜可賀可喜可賀,恭喜本系列終於來到 part 30 啦! 簡介(Introduction)我們最熟悉的命名空間不外乎就是: 1using namespace std; 為什麼要用這個?因為我們不想要打那麼多字,每次打一行程式碼都要加上 std:: 不是挺麻煩的嗎? 123std::coutstd::endlstd::vector <int> a; 但其實除了圖方便以外,命名空間也有其他功能。 假設班上有兩名同學,他們都叫陳柏鈞,為了要區分他們兩個,我們就必定要用到額外的訊息去區分,如一個比較有錢,一個普通,或是一個帥,一個醜等等。 在 C++ 中,假設有個函數叫做 func(),而在另一個 library 也叫做 func(),此時就會有命名衝突(Name confli...
【C++ 筆記】動態記憶體(new / delete) - part 29
【C++ 筆記】動態記憶體(new / delete) - part 29很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 動態記憶體(Dynamic Memory)什麼是動態記憶體?當我們宣告一個變數的時候,編譯器會依據這個變數所屬的資料型態,自動配置其記憶體空間。這些資源都是配置於記憶體的堆疊區(stack),生命週期僅止於函數執行期間,當函數執行完成後就會自動清除。 另外,一旦配置後,就不能被刪除或更改他的大小。所以這時候動態記憶體就出現了。 在 C++ 中,記憶體分為兩部分(from 菜鳥教程): 堆疊區(stack):在函數內部宣告的所有變數都將佔用堆積記憶體。 堆積區(heap):程式中未使用的記憶體,在程式執行時可用於動態配置記憶體。 動態記憶體配置是在程式執行時配置記憶體的過程,這可以讓開發者在程式執行期間預留一些記憶體,依據開發者的需求去用它,然後再把記憶體給釋放以用於其他目...
【C++ 筆記】例外處理(Exception Handling) - part 28
【C++ 筆記】例外處理(Exception Handling) - part 28很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 例外是什麼?例外(exception)又稱為異常,是指程式在執行過程當中發生的例外情況或錯誤事件。如將兩數相除的過程中,有一個數除於 0,這會是一個例外,因為可能會導致未定義的錯誤。 而處理例外的過程就稱為例外處理,對 XD。 基本例外處理try-catch語法: 12345678try { // 這可能會拋出一個例外 // Code that might throw an exception} catch (ExceptionType e) { // 例外處理的地方 // exception handling code} 當 try 區塊發生例外的時候,於 try 的區塊會停止,catch 就會...
【C++ 筆記】型態轉換運算子(Casting Operator)
【C++ 筆記】型態轉換運算子(Casting Operator)很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 四大運算子稍後要講的這些運算子都是所謂的顯式轉換,表示有明確的函式去強制轉換資料型態,反之則為隱式轉換,如 10 / 1.0 自動轉成 float。 C-style 的顯式轉換:(int)var。 在 C++ 用 casting operator 取代,也更為安全。 1. static_cast編譯時才轉換,因此在執行過程中沒有任何的效能開銷。 語法: 1static_cast <new_type> (exp); exp:要轉換的資料。 new_type:所需的運算式型態。 The static_cast can be used to convert between related types, such as numeric types or pointers in...
【C++ 筆記】檔案處理 - part 27
【C++ 筆記】檔案處理 - part 27很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 至此之前,我們已經有學過 <iostream> 的標準輸入輸出流 cin, cout。 那本篇要學的就是 <fstream> 裡面的三種流,ofstream, ifstream, fstream。 基本檔案處理(File Handing)<fstream> 定義了三種資料型態: 表格參考:菜鳥教程 資料型態 敘述 ofstream (o:Output)輸出檔案流,用於建立檔案並向檔案寫入訊息。 ifstream (i:Input)輸入檔案流,用於從檔案中讀取訊息。 fstream 上述兩種資料型態的結合體,亦即同時具備兩種資料型態的功能。 要做到檔案處理,需引入 <iostream> 跟 <fstream>。 檔案...
【C++ 筆記】抽象類別(Abstract Class, ABC) - part 26
【C++ 筆記】抽象類別(Abstract Class, ABC) - part 26很感謝你點進來這篇文章。 你好,我並不是什麼 C++、程式語言的專家,所以本文若有些錯誤麻煩請各位鞭大力一點,我極需各位的指正及指導!!本系列文章的性質主要以詼諧的口吻,一派輕鬆的態度自學程式語言,如果你喜歡,麻煩留言說聲文章讚讚吧! 純虛函數(Pure Virtual Function)在講抽象類別(簡稱 ABC)之前,先來複習一下這個鬼東西。 :::info純虛函數(Pure Virtual Functions): 一個包含純虛函數的類別被稱為抽象類別(Abstract Class),它不能被直接實例化。 純虛函數沒有函數體,宣告時使用 = 0。 它強制衍生類別提供具體的實作。::: 來源:菜鳥教程 純虛函數宣告例子: 1234class Shape {public: virtual void draw() = 0; // 純虛擬函式}; 以上這段是來自本篇筆記系列的 part 23 多型。 抽象類別(Abstract Class, ABC)定義抽象類別是至少含...


