什麼是電腦奧林匹克/競技編程?
競技編程是一種智力運動,參賽者(個人或隊伍)嘗試在特定時間限制內解決定義明確的編程問題。這些問題需要算法思維、數據結構知識以及高效的編碼和除錯技能。評委會使用隱藏的測試數據,根據解決方案的正確性和效率(時間和內存使用情況)自動評估。這是具有挑戰性的活動有助於提高解決問題的能力和編程技術。
有哪些編程比賽的例子?
有許多不同級別的編程比賽,包括:
- 國際信息學奧林匹克競賽 (IOI):頂尖的年度中學生競賽。
- 全國青少年信息學奧林匹克競賽 (NOI):中國中學生的全國性比賽。
- 國際大學生程序設計競賽 (ICPC):一項全球知名的大學生競賽。參賽者以 3 人團隊的形式參加。
在本地,我們為中學生組織以下比賽:
- 香港電腦奧林匹克競賽 (HKOI)
- 香港女子電腦奧林匹克競賽 (HKGOI)
- 全港中學生軟件開發邀請賽 (SDIC & CSP-J/S)
- 全國青少年信息學奧林匹克聯賽 (NOIP)
其他本地比賽包括:
- 香港城市大學主辦的香港中學編程挑戰賽 (HKSC)
- 培正喇沙编程挑戰賽
在解決電腦奧林匹克題目時,我需要驗證輸入嗎?
一般來說,不需要。在大多數電腦奧林匹克競賽及競技編程比賽(包括 HKOI/HKGOI)中,假設輸入將嚴格遵守問題陳述中描述的指定格式和約束。除非問題明確說明,否則您不需要編寫額外的代碼來檢查無效輸入。請將精力集中在使用給定的有效輸入來解決問題。
程式是如何評測的?
程式由網上評測系統自動評測。過程包括:
- 編譯:使用指定的編譯器和標誌編譯提交的源代碼。
- 執行:編譯後的程式將針對一組參賽者不知道的測試數據(輸入數據)執行。
- 效率測量:測量程式的執行時間和內存使用情況,以確保它們在指定限制內。超出這些限制將導致「時間超出限制」或「執行錯誤」的結果。
- 輸出驗證:將每個測試數據的程式輸出與預期輸出(由評委預先設定)進行比較。
- 評分:根據通過的測試數據數目給分。對於 HKOI 和 HKGOI,如果通過子任務中的所有測試數據,則可以獲得該子任務的分數。
我的程式碼需要易讀嗎?
雖然我們不會評判程式碼品質或風格(例如變量名稱或註釋),但我們建議編寫易讀的程式碼。清晰且結構良好的程式碼可以讓您在時間緊迫的比賽環境中更容易除錯。使用有意義的變量名稱、為複雜邏輯添加註釋以及遵循一致的格式,可以在您嘗試識別和修復錯誤時節省寶貴的時間並減少挫敗感。
數學知識對電腦奧林匹克有用嗎?
電腦利用數字進行運算。這就是為什麼電腦奧林匹克競賽會測試數學,尤其是離散數學的知識。
Linux 知識對比賽有用嗎?
有的。在我們舉辦的所有比賽,包括 HKOI、HKGOI、SDIC及NOIP,學生用於解題的虛擬主機是基於 Linux 的。對於 HKOI及HKGOI,我們亦提供一個網頁版簡易 IDE(HKOI 網上評測系統的「Code」功能),有不少參賽者選擇使用。