Codeforces
簡稱: cf(因此談論cf的時候常常被誤會成TX的那款遊戲).
網址: codeforces.com
這是一個俄國的算法競賽網站,由來自薩拉托夫州立大學、由Mike Mirzayanov領導的一個團隊創立和維護,是一個舉辦比賽、作題和交流的平臺.舉辦比賽和作題就不說了,「交流」指的是自帶blog功能,能夠求助/發佈題解之類.算法
官方語言是俄語和英語,所以可能有些偏僻的題目的題解是用俄語寫的,別慌,扔給Google Translate翻成英文,可讀性仍是很不錯的.測試
至於英語,cf上Russian English確實有,但並不嚴重,題目裏偶爾會出現很奇怪的表達方式或者不經常使用的詞彙,這時候就藉助樣例吧,找我的問問也是能夠的.大數據
cf最大的特色是比賽,因此接下來主要的篇幅用於介紹cf傳統比賽的規則.網站
在cf,全部的用戶根據在以往比賽中的表現被賦予一個Rating並冠以不一樣的頭銜,名字也會以不一樣的顏色顯示,好比Expert是藍色,Master是黃色,所以咱們一般以顏色代指頭銜.翻譯
選手們按Rating以1700爲界劃分爲Div.1和Div.2兩類,相應地,cf上的比賽也會指明是Div.1仍是Div.2,code
抑或同時進行.Div.1的比賽較難;若是同時進行,blog
Div.1的ABC三題會和Div.2的CDE三題相同.每次比賽結束後Rating都會依據此前各個選手的Rating和公式從新計算.對於沒有參加過比賽的新用戶,在比賽後從新計算Rating的時候,他此前的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),也能夠選擇只看加了好友的選手的排名.此外,還能夠看到某題有多少人經過的信息,這在某些狀況下頗有用.
關於比賽的事情大概就是這麼多.cf題庫的全部題目都是在該平臺上舉辦過的比賽的賽題,儘管WJMZBMR曾經表示因爲出題人很雜cf的題目質量良莠不齊,但我我的認爲仍是夠能夠的,兩個小時五道題也確實很能讓人獲得鍛鍊.和Spoj造成鮮明對比的,cf的機子效率很不錯,因此很容易培養出STL依賴症等等不良代碼習慣,應當引發足夠的注意.
在cf上作題的過程中若是遇到困難,首先能夠看數據.數據從某種程度上來講是公開的,在提交記錄頁面能夠看到全部你的程序運行過的數據,可是太大的數據也只會顯示前幾行,所以也不算徹底公開.cf的測試數據筆數一般會讓習慣了10個點的人大吃一驚,一道題動輒幾十個測試點,甚至有的有200多筆.一般來講,前面大概5組是比賽時的Pretest,通常會盡量的涵蓋各類狀況,也有放個大數據卡TLE的;其後的數據規模遞增,可是最後幾組又不見得是極限數據——這是比賽時Hack的成果.Hack成功的數據會被追加到該題的測試數據當中.
若是數據不能解決問題,能夠試圖去找題解.題目頁面的右下角會標出它所屬的比賽的相關文檔,一般會有Announcement(賽前和賽中的公告,其中賽中的公告一般是明確題意之類),有些則會有Tutorial,這就是題解,順帶一提cf上另一個表示題解的詞是Editorial.一次比賽的題解可能不是官方的,也可能不包含該次比賽所有的題目的,也有多是用俄語寫的(前面提到過了,翻譯成英語就好),也有可能有好幾篇(這會以Tutorial #1,#2的形式標識).
近期的比賽多半都有官方題解,之前的就很差說了.這時候須要藉助另一個神器:神犇們的代碼.cf上普通題庫的全部的代碼都是公開的,而且支持按照提交前後(Judging Time),運行時間(Execution Time)和代碼長度(Solution Size)進行排序.不只僅是幫助作題,這個功能對於瞭解一道題的各類作法也是有好處的.
主要的東西就介紹完了.這裏再補充一點一些零散的東西.
關於Rating的計算 : 這是一種相似Elo Rating的系統,能夠在cf的FAQ或Wiki百科找到更詳細的信息.
關於Contribution : 在用戶信息頁面會見到這個東西,它用來衡量一個用戶對cf的貢獻程度.這個數值取決於該用戶所寫的blog和他對其餘的blog所做出的評論的「反響」.每一個blog的下方和評論的旁邊都會有一個往上和往下的箭頭以及一個數字,表示你能夠對他進行好或者很差的評價,而數字則顯示當前已有的評價,而這就是前面說到的「反響」.點擊了往下的箭頭會讓這個數值-1,點擊了往上的箭頭則會+1或+2,這裏+2的條件是你自己的contribution不低於+25.若是你打算作評論,請謹慎,由於在貼吧裏很正常的回覆可能會被認爲「沒意義」或者別的緣由而反響不好(好比在比賽預告帖回覆Good luck everyone之類的能夠被-12),隨而contribution也會很難看.因爲這樣的緣由,你能夠選擇徹底能夠無視這個數值.
關於GYM : 在gym裏舉辦的比賽基本上是ACM/ICPC規則的,能夠單幹,也能夠組隊(人數彷佛沒有限制).gym的題目並不會在Problemset裏顯示,提交以後也不能看到數據(和常規比賽時同樣,僅能看到一行TLE on test 137之類),不過在名字變紅[即(International) Grandmaster]以後選上Coach mode就能夠看到數據.gym裏別人的代碼的公開性也服從前述規則.
關於Virtual Participant : 有時咱們會在某條提交記錄的ID右上方看到一個小小的#號或者顯示一個時間,鼠標移上去會出現Virtual Participant的字樣.正如其字面意思,這意味着這個用戶正在「虛擬」參加一場比賽.若是你虛擬地參加一場比賽,系統會在接下來的2小時內(若是gym的話另當別論)爲你徹底地模擬當時的情境供你練習——包括Standing等等.
關於奇葩的測評結果 : 這包括Compilation failed,Denial of Judgement和Judgement Failed.在你確認你的程序沒什麼重大問題以後,基本能夠認定這不是你的問題而是系統出了點差錯.Judgement Failed一般會呈現爆發的樣子,一段時間內幾頁都是,當這種狀況結束的時候就正常了;而Denial of Judgement僅會在某段時間內在特定的題目發生,緣由多是數據損壞之類的,可能要等上個一兩天才能獲得解決(也有可能在問題解決後被自動從新測評);Compilation failed我尚未見過...字面意思是編譯器不幹活?
附 各個頭銜的Rating範圍和名字顏色:
[2600, inf) International Grandmaster 紅
[2200,2600) Grandmaster 紅
[2050,2200) International Master 黃
[1900,2050) Master 黃
[1700,1900) Candidate Master 紫
[1500,1700) Expert 藍
[1350,1500) Specialist 綠
[1200,1350) Pupil 綠
(-inf,1200) Newbie 灰
附 "ALL" CodeForces Rounds Tutorial By iman_MC
codeforces.com/blog/entry/1492
有些Codeforces上有人發過的題解並無被連接到對應的題目上(即,存在題解,可是題目頁面右下方並無Tutorial連接),有可能能夠在這裏找到.
固然這也並非徹底的,並且時不時會更新.具體裏面有哪些我就不廢話了,各位本身去看看吧.遊戲