Codeforces是一個俄國的算法學術活動網站,由來自薩拉托夫州立大學、由Mike Mirzayanov領導的一個團隊創立和維護,是一個舉辦比賽、做題和交流的平臺。blog功能可以求助/發布題解。官方語言是俄語和英語,因此可能有些偏僻的題目的題解是由俄語編寫的。
Codeforces很大的特點就是題目兼容并蓄,什么難度等級的題目都可以找到。并且題目很有意思,思維題較多,常常伴隨著出題人的陷阱等等。Codeforces另外一個很大的特點就是它有自己的上分系統,基本上每周會舉辦一到兩次在線的算法比賽。一般的比賽時長是兩個小時,只要注冊賬號就可以免費參加。由于參加的選手水平實力不一致,所以它開設了好幾個檔次(div),不同層次的選手面對的題目難度也不一樣,這樣保證了大家都可以參賽。
關于比賽
在Codeforces上,每名用戶都擁有比賽積分(即Rating)(新用戶默認為1500),比賽積分會影響用戶的名字顏色。
在比賽中,選手有2個小時的時間去解決5道題,而解決某題得到的分數由該題當前的分數減去(不成功的提交次數)*50,這里,某道題的分數是由比賽開始時的分數隨時間線性減少得到的。同時,這里的“解決某道題”是指Pretest Passed,即,通過了一次僅含部分測試點的測評,而最終決定是否得到這道題的分數,要看比賽結束后的統一測評(System Test),如果在這時沒有通過,就稱FST(Failed System Test)。在比賽中的提交可以看到在哪個測試點出了什么問題(例如,僅一行WA on pretest 3)。
同一個Div的選手將被劃分到若干個Room里,每個Room大概30位選手;當某道題Pretest Passed之后,可以選擇鎖定(Lock)該題代碼,之后就可以查看同一個Room內其他選手該題的代碼(當然了,這也是已經通過pretest的),并試圖找出其中的漏洞,自己出一個數據(可以手打,也可以提交數據生成器)讓這個代碼不能通過,這就是Hack,有時也稱Challenge。一次成功的Hack可以得到100分,而如果沒有成功,將會被扣50分,分別被稱為(un)successful hacking attempt。
在比賽中,選手可以看到實時的排名(Standing),也可以選擇只看加了好友的選手的排名。此外,還可以看到某題有多少人通過的信息,這在某些情況下很有用。
Top欄里基本上是大牛放出來的一些資料、博客和題解什么的。下圖就是一個大牛整理的對于一些題目的解法,也附上了原題鏈接。
資深大牛描述一個問題或者是算法的時候自然不會用太晦澀的單詞,在這里面可以學到很多知識和解題經驗。
Contest欄目下是正在進行以及過去舉辦過的線上比賽。

比賽名稱后面括號里div表示的是難度等級,div1是最高難度。需要有1900以上的rating才可以報名。div2難度會簡單很多,基本上學過算法和數據結構都可以進去做個一兩題。div2的比賽前兩題基本上都不涉及什么算法,主要是考驗思維。一般到了C題之后才會考察一些算法和數據結構。
Contest history是之前舉辦過的比賽,可以點進去練習,replay功能可以復盤當時的比賽的情況。
Gym在這里是練習題的意思,在這里可以查看當時比賽的排名,也可以進入比賽試卷練習。

Gym欄目下的大多是一些專業的比賽題以及ACM的練習題,和Contest里面的題比起來Gym里面的題難度會更大一些。并且也會有各種算法和數據結構的專題。雖然看起來難度更大,但是里面的題目也是有區分度的,并不是每一題都很難,完成部分題目還是可以做到的。
Codeforces當中的比賽一般有5道題,由于只有兩個小時的時間,我們一般也很難把5道題都做完。基本上能做出來三題左右,rating就不會下跌。當然rating的漲跌情況也和你當前的rating有關,系統會根據你現在的rating對你的表現有一個期望,最終的漲跌就是你實際表現和這個期望的差值。一般小白做兩題可能就可以漲分,如果當前rating已經很高的話,也只做了兩題,rating肯定是下跌的。

在比賽的時候可以實時看到每一道題有多少人做對,這對于我們做題的優先級幫助是非常大的。一般來講越前面的題目越簡單,但也有例外,經常有些題目暗藏陷阱,雖然題目看起來簡單,想要完全做對也是很難的。
比賽期間我們是可以查看其它選手的代碼的,有一個欄目叫Room,在比賽的時候系統會隨機分配房間。你可以查看同房間內通過了同樣問題的人的代碼。
Codeforces在比賽的時候只會測試一小部分數據,真正的測試集會放到賽后進行測試。所以在比賽中測試通過的代碼,只要通過了小數據驗證,很有可能有隱藏的問題沒被發現。當你通過了這道題之后,你就可以去查看其他通過人的代碼,去分析它們有沒有問題,如果發現了bug,可以構造一份數據hack掉他的提交。hack成功之后,你會獲得分數的獎勵。

你可以雙擊打開其他人的提交記錄,去閱讀他們的代碼。到了比賽后期,能做的問題做的差不多了之后,就進入了緊張刺激的互相hack階段。很多參賽者的樂趣就在于此。
Problemset欄目下是練習題,和我們國內的許多OJ形式差不多,覺得打一場比賽陣線過長的,可以利用碎片化的時間來這里練習。

若在做題過程中遇到了困難,那么可以選擇查看題解:
找到題目側邊欄中的"Contest materials",然后單擊"Tutorial"或者"Editoral",會有英語(極少數為俄語)題解。

Codeforces上的提交記錄和代碼都是公開的,你可以找到該題其它人的提交記錄,查看代碼。
注意:不要提交其它人的代碼,否則您會被警告甚至會被封號。
更多賽事信息及參賽經驗分享 ,請掃碼添加翰林顧問老師詳細咨詢
還有不定期的高能講座等你來參加!


? 2025. All Rights Reserved. 滬ICP備2023009024號-1