此儲存庫託管 KACTL、KTH 的 ICPC 團隊參考文件。它由 25 頁可複製貼上的 C++ 程式碼組成,用於 ICPC 風格的程式設計競賽。
有關最終的可瀏覽版本,請參閱 kactl.pdf,有關原始原始程式碼,請參閱 content/。
KACTL 演算法應該:有用、簡短、足夠快、經過充分測試,並且如果相關的話,可讀且易於修改。它們不應該過於通用,因為程式碼是手動輸入的,這只會增加開銷。由於空間問題,我們也排除了非常常見/簡單的演算法(例如 Dijkstra)或非常不常見的演算法(一般加權匹配)。
如果您覺得缺少某些內容、可以清理或發現錯誤,請提出問題或發送拉取請求!
雖然 KACTL 可以按原樣使用,但如果您想建立個人化副本,也可以輕鬆修改。特別是,您可能想要更改封面頁,或自行選擇要包含的演算法 - 由於空間問題,並非儲存庫中的所有演算法都包含在 pdf 中。您可能還想啟用彩色語法突出顯示。
content/ content/kactl.tex chapter.tex KACTL的主文件,可以編輯以更改團隊名稱、徽標、語法突出顯示等。其中包括 LaTeX 形式的原始碼、文字和數學。若要在章節中新增/刪除程式碼,請從chapter.tex檔案中新增/刪除對應的kactlimport行。為了更好地對齊,您可能需要插入hardcolumnbreak 、 columnbreak或newpage命令,儘管這通常只在重要比賽之前完成,而不是在主分支上完成。 pdf 中未包含的演算法在chapter.tex中被註解掉。
要建立 KACTL,請在 *nix 機器上輸入make kactl (或make fast )—這將更新kactl.pdf 。 (Windows 也可能工作,但未經測試。) doc/README還有一些關於此的註釋。
尖端:
make showexcluded查看預設排除的內容。選擇預設配置是為了初學者和高級團隊的合理平衡。hash.sh或.vimrc中的:Hash指令產生。雜湊忽略空格和註釋。 KACTL 使用相對簡潔的編碼風格,在範本中定義了一些巨集/typedef,有助於縮短程式碼。行寬為 63 個字符,帶有製表符用於縮排(製表符 = pdf 中的 2 個空格)。
每個演算法都包含一個標頭,其中包含程式碼的作者、新增日期、演算法的描述、其測試狀態,最好還包含來源、許可證和時間複雜度。
kactl.pdf 的長度為 25 頁 + 封面頁。有時為了方便起見,生成的 kactl.pdf 會提交到儲存庫,但不會太頻繁,因為它會使 git 操作變慢。
KACTL 的目標是對演算法的正確性具有高度的信心。測試是在線上法官和(對於較新的演算法)上進行的,壓力測試將輸出與大量隨機生成的案例的更簡單的演算法進行比較。這些測試位於stress-tests目錄中,並在每次提交時使用 CI 運行。 CI 也會驗證所有標頭是否已編譯(除了docs/scripts/skip_headers中的排除清單)以及 Latex 是否已編譯。
old-unit-tests包含一些損壞的單元測試,上次觸及大約十年前。
與競爭性節目一樣,許可情況有點不清楚。許多來源文件都標有許可證(我們嘗試使用 CC0),但也有許多沒有。不過,假定其他作者有良好意願,並且在許多情況下不需要許可,因為程式碼沒有分發。為了幫助追溯,源文件中註明了來源和作者。
除了來自網路的參考實作之外stress-tests中的所有內容都隱式地採用 CC0。