我是 Un_titled。只是住在那一帶的高中生。
因為 AtCoder 的規則變更,終於有了把程式庫管理到 GitHub 上的動機,所以我想把自己身為純競賽程式(競程)出身而以前不知道的事情,整理成備忘錄留存下來。
主要會記錄:
等等。
「明明很弱還做程式庫也沒人會用啦」這種酸言酸語我不接受。
從灰名時期開始,我就一直把筆記存在 Notion 裡。
(所以裡面還有像是 vector 的用法之類,各種很久以前的筆記。哇哦。)
也因此,現在有很多不必要或過於冗長的說明。
再加上我以前很輕視演算法(?),完全沒有分類的概念,只是一味地羅列,情況相當慘烈。
這篇文章就是在嘗試把它們整理得更容易懂,並移植到 GitHub 上。
本來我一直在想這到底是什麼,不過好像是會顯示在 About 欄位的內容(在電腦版會顯示在右側)。
先暫時設成 Un_titled's C++ library for competitive programming。
我在 Twitter 上常常看到 MIT、CC0 這些字樣,所以覺得最好還是加上一個授權條款。
反正看起來有授權會比較帥,所以就加了。
MIT 是一種授權條款,只要保留著作權聲明與授權文字等條件,就廣泛允許商業使用、修改、再散布等行為。
另一方面,CC0 則是盡可能放棄著作權等權利,讓作品盡可能可以自由使用的機制。
這次就先選了在建立倉庫時候選列表最上面出現的 MIT。
反正除了我以外應該也不太會有人用,就先以自爽為主就好。
我常常看到別人的 README 上有一些像徽章的東西。很帥對吧。
我也有點想要那個。
如果是想放工作流程狀態(像是 verify 有沒有通過之類的),可以參考官方文件。
而我想放的則更單純,就是:
這種……只是單純想把版面裝飾得更好看的東西。
這時候參考 shields.io 來寫應該就很不錯。
徽章基本上是由下面這種格式構成:

其中標籤就是上面範例中的 Language,訊息是 C++20,訊息的顏色則指定成藍色。
照這個方式就能大量產生。
雖然最後我加上的內容,很多都和這個原型有點不太一樣,但大致上差不多啦。
太難的徽章就等到我有時間和實力之後再說,所以這裡就不深入了。
我也從網路上各種文章和程式庫裡「借」了不少徽章來參考。
目前先放了這些。程式碼如下。



只有授權條款那個有加上連結,點擊後會跳轉到授權頁面。
直接原封不動地貼上去其實也沒什麼問題。
但這樣還是解決不了目前存放程式庫的 Notion 最大的缺點:「因為一開始沒有規劃,所以沒有分類,很難找」。
先大致整理成下面這樣:
雖然用 .cpp 也不是不行,不過我試著改成 .hpp 了。
看別人的程式庫也常常是 .hpp,所以大概算是常見用法吧(隨便說說)。
據說 .hpp 常被拿來當作 C++ 的標頭檔副檔名。
而且,有時候你是不是會想在程式庫裡使用別的函式?
例如,要算逆元時會用到快速冪。這時候,只要把寫好快速冪的標頭檔直接 include 進來就能用了。
很方便!
這樣可以減少冗餘,我個人也比較喜歡這種方式。
不過要注意多重定義之類的問題……
我也加上了 #pragma once,用來防止同一個標頭檔被重複 include。
我在 README 裡加了一個方便自己查找的目錄。
相對路徑真的很好用!
Contributions, bug reports, and suggestions are welcome via GitHub Issues.
歡迎透過 GitHub Issues 提出錯誤回報與改善建議。
我希望能有親切的人幫我修正。
如果你發現了錯誤,還請告訴我。
我很有自信在移植過程中又增加了不少打字錯誤。
我在註解裡寫了各個演算法的計算量。
不過這個也很可能寫錯。
如果你發現有誤,還請透過 Issues 等方式告訴我,感激不盡。
總之現在就完成了這些。太好了!
我好幾次看到 verify-oj 這個詞。
感覺有的話很帥。
雖然也想著總有一天要加上……
因為今年夏天到秋天有很多使用 GitHub 的機會,所以我覺得如果熟悉了,其實也沒那麼難。
也很感謝提醒我忘記切換 Git 帳號的ょっょ大神。
我想再多學一些演算法,讓這個程式庫繼續成長下去。