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

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

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

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

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

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

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


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