大家好,之前說過由於和LeetCode結了樑子,所以週末的LeetCode專題取消了,給大家寫點其他專題的演算法問題。目前選擇的是國外著名的程式設計競賽平臺——codeforces。它在競賽圈名氣比較大,對於普通大學生而言可能瞭解不多。所以今天這篇文章簡單和大家介紹一下codeforces這個網站,以及它的使用方法。
連結:codeforces.com
codeforces簡介
簡單介紹一下codeforces這個網站,codeforces位於宇宙程式設計最強的毛國。據說最早是由俄羅斯的一群大學生維護的,它最大的特點就是程式碼和題解的公開。所有人都可以隨意檢視其它大牛的程式碼,可以說是非常具有開源精神了。
codeforces很大的特點就是題目相容幷蓄,什麼難度等級的題目都可以找到。並且題目很有意思,往往思維陷阱比較多,也就是思維題比較多。對於資料結構以及演算法的考察相對弱一些,更多的時候往往是告訴你用什麼演算法你也不知道怎麼做……
codeforces另外一個很大的特點就是它有自己的上分系統,基本上每週會舉辦一到兩次線上的演算法比賽。一般的比賽時長是兩個小時,只要註冊賬號就可以免費參加。我記得當年第一次參加比賽會獲得一個初始分是1500,然後根據你在比賽當中的表現上分或者減分。由於參加的選手水平實力強度不一,所以它開設了好幾個檔次(div),不同層次的選手面對的題目難度也不一樣,這樣保證了大家都可以愉快地參賽。
這塊內容比較重要,我們放在後面詳細介紹。
基本功能
簡介介紹一下codeforces當中的功能以及頁面,這個是首頁的banner,我們挑幾個比較重要的來介紹一下。
TOP
首先是Top,top裡基本上是大牛放出來的一些資料、部落格和題解什麼的。比如下圖就是一個大牛整理的一些演算法和資料結構的經典問題整理。
這裡面乾貨還是很多的,但是由於是國外的網站,所以顯然肯定是全英文的。不過也不要懼怕,大家都是技術男,而且大多數不是native。描述一個問題或者是演算法的時候也不會使用太晦澀的單詞,所以還是蠻好懂的。另外現在線上翻譯功能也很發達,我當年英語很差的時候都沒什麼壓力,所以大家也不要擔心。
contest
第二個重要的欄目是contest,裡面是正在進行以及過去舉辦過的線上比賽。
比如上圖就是目前的一個比賽安排計劃,即將開始的比賽會多出來一個register按鈕,讓大家註冊參加。
比賽名稱後面括號裡div表示的是難度等級,div1是最高難度。需要有1900以上的rating才可以報名。div2難度會簡單很多,基本上學過演算法和資料結構都可以進去做個一兩題。div2的比賽前兩題基本上都不涉及什麼演算法,主要是考驗思維。一般到了C題之後才會考察一些演算法和資料結構。
這張圖是之前舉辦過的比賽,我們也可以點進去練習,它還提供replay功能,可以模擬當時的比賽的情況。
gym
gym英文是健身房的意思,這裡顧名思義可以理解成練習題。
gym欄目下的一般是一些專業的比賽題以及acm的練習題,和contest裡面的題比起來gym裡面的題難度會更大一些。並且也會有各種演算法和資料結構的專題。雖然看起來難度更大,但是裡面的題目也是有區分度的,並不是每一題都很難,即使水平一般也是可以做一兩道的。
首頁當中比較常用的功能就是這些,後面還有像是小組、天梯、日曆等一些功能,由於不是非常常用,這裡就不多贅述了。
比賽
最後介紹一下codeforces當中的比賽,這個是它起家的核心功能,不能不提。
codeforces當中的比賽一般有六道題,由於只有兩個小時的時間,我們一般也很難把6道題都做完。基本上能做出來三題,rating就不會跌了。當然rating的漲跌情況也和你現在的rating有關,系統會根據你現在的rating對你的表現有一個期望,你最終的漲跌就是你實際表現和這個期望的差值。菜鳥做兩題可能就可以漲分,但如果你現在rating已經很高的話,你也做了兩題,那你肯定是跌的。
我們在比賽的時候可以實時看到每一道題過了多少人,這個有助於幫助我們選擇題目。一般來說越前面的題目越簡單,但是也有例外,比如有些題藏了一些陷阱,雖然簡單,但是很多人沒想到都掛在上面,這是常有的事。
當我們比賽的時候,經常會出現一種情況,就是我們做了3題之後還有時間,但是後面的題目一時想不出來了。這個時候多了時間可以幹嘛呢,可以檢視其它選手的程式碼。我們可以看到這裡有一個欄目叫Room,在比賽的時候系統會隨機分配房間。你可以檢視同房間內通過了同樣問題的人的程式碼。
codeforces在比賽的時候只會測試一小部分資料,真正的測試集會放到賽後進行測試。所以在比賽中測試通過的程式碼,只是通過了小資料驗證,很有可能有隱藏的問題沒被發現。當你通過了這道題之後,你就可以去檢視其他通過人的程式碼,去分析它們有沒有問題,如果發現了bug,可以構造一份資料hack掉他的提交。hack成功之後,你會獲得分數的獎勵。
你可以雙擊開啟其他人的提交記錄,去閱讀他們的程式碼。到了比賽後期,能做的問題做的差不多了之後,就進入了緊張刺激的互相hack階段。講道理,這比只是單純做題的競賽要有趣多了。
以前我們acm集訓隊經常晚上一起打codeforces的比賽,有時候看到隊友在一個房間裡,還會互相關注一下近況,互相hack一把,不得不說現在懷念起來還是非常有意思的。
好了,關於codeforces網站就介紹到這裡了,如果你也對演算法感興趣的話,不妨試著用一下它吧,相信你也會找到演算法的樂趣。
衷心祝願大家每天都有所收穫。如果還喜歡今天的內容的話,請來一個三連支援吧~(點贊、關注、轉發)
本文使用 mdnice 排版
- END -{{uploading-image-349576.png(uploading...)}}