TopCoder入门教程
from http://hi.baidu.com/juart/blog/item/e0ef838b705eb9d4fd1f1039.html
基本規則
TopCoder的比賽類型很多,最常見的是周賽SRM(Single Round Match),另外還有TCHS SRM(TopCoder High School SRM,題目和SRM一樣,僅限中學生參加,參賽者水平較低,據說漲rating很容易),馬拉松(Marathon Matchs),還有TCOpen(每年兩次的大比賽)之類的比賽。因為大多數人都在做SRM,所以本文介紹的TC比賽即為SRM。
SRM的規則總結起來就是一句話:75分鐘做完3道難度遞增的題。
TC的每個用戶(handle)都有自己的積分(rating),從0-3000+不等。成績越好,分數越高。
積分與顏色的對應為:白色——未參賽(unrated);灰色——0~899;綠色——900~1199;藍色——1200~1499;黃色——1500~2199;紅色——2200+。另外排名最高的幾個人在TC客戶端中會變成紅色靶子圖標。
比賽分為兩個Division,Div I和Div II。白色灰色和綠色的參加Div II,藍色黃色和紅色的參加Div I。Div I的題要比Div II難許多,一般DivII的最后一題和Div I的第一或第二題是一樣的。無論是Div I或Div II。三道題目的Score一般為250, 500和1000。
TC的計分規則很詭異,可以見http://www.topcoder.com/wiki/display/tc/Algorithm+Competition+Rating+System,但基本是沒人看的懂。不過,TC積分規則的基本思想很簡單。
首先是SRM每道題的計分規則。題目從打開開始計時,隨著時間的流逝,你這道題目可能得到的分數也越來越少。不過分數減少的速率會逐漸變慢(有人說是先快后慢再快再慢,我不清楚到底哪個是對的,不過總體趨勢是越來越慢),一般1000分的題目在降低到300分的時候就基本不會再下降太多了。每道題點擊Submit才算正式提交,如果Submit之后發現錯誤,還可以再次點擊Submit修改提交,不過這樣會扣除這道題一定的分數。
其次是TC的計分規則。復雜的數學公式很難看懂,但大概的計分思想是:根據此次比賽的得分算出一個這次比賽的rank,然后和以前的rank做比較,求出一個期望的rank,再根據這個期望的rank調整rating。而有時也會出現考得很砸但依然漲rating的情況,不過總體來說TC的計分公式是十分穩定的。
運行環境
TC的客戶端是一個Java程序,所以需要JRE(Java Runtime Environment)或者JDK(Java Development Kit)來運行。如果平時不寫Java程序的話,裝JRE就可以了。畢竟JDK比JRE大一個數量級,下載慢。安裝照著提示完成就行了。推薦使用1.4.1以后的版本,因為帶了java web start,可以快速登陸。具體方法下一部分講。
JRE下載地址(中文):http://www.java.com/zh_CN/download/index.jsp
注冊
原文在注冊的地方沒有詳細說明,但很多人似乎對注冊都有疑問。所以這里我來注冊一個小號,并通過整個過程講解如何注冊。
首先打開http://www.topcoder.com/tc(本文后面TopCoder的主頁都指這個網址),然后點擊右上角的Register Now(沒看到?你可能看到了一個Login,目光向下挪一點,那個紅底白字的“Register Now”就在下面)。接下來會彈出http://www.topcoder.com/reg這個頁面,因為我們要參加SRM,所以選擇第一個,Competition Registration。如果要參加TCHS可以選擇第二個High School (Secondary School) Registration。這些以后都可以更改(這里沒有選的如果以后要選上,只需要更新個人設置并挑勾;如果選上的要撤銷選擇則需要點一個“Unregister”的鏈接)。這里選擇項目的多少和后面的頁面需要填寫內容的多少相關,本文以只選擇第一項為例。
需要填寫的項目和對應的中文翻譯如下:
* Given Name: 名
* Surname:???? 姓
* Address1: 地址1
Address2: 地址2
Address3: 地址3(如果一行寫不開,就在三行中分別寫)
* City:?? 城市
State (US Only): 地區(不在美國就不用選)
Postal Code: 郵編
Province: 省
* Country: 國家
* Country to represent: 代表國家(不知道啥意思,中國人兩個都填China就行)
* Timezone: 時區(選Asia/Chongqing)
Phone Number: 電話號碼
* Email Address: 電子郵件
* Confirm Email Address: 確認電子郵件地址(就是把電子郵件地址重新打一遍)???
Email Notifications: 郵件提醒(就是它給你發郵件提醒什么東西)
- Algorithm Competitions 算法比賽,就是SRM和TCOpen
- Software Development Opportunities 貌似就是有軟件開發的項目就告訴你
- Employment Opportunities 工作機會
- TopCoder News & Events 新聞
* Enable Member Contact: 允許成員聯系(似乎就是說是不是讓別人在TC上能找到你)
* Show / hide earnings: 顯示/隱藏收入(大概是說別人是不是能看到你賺了多少錢,TC的比賽可是有錢賺的)
* User Name: 用戶名(下面的話提醒你一定不要填錯,因為注冊多個用戶是不符合規定的。據說有人因為別人在TC客戶端和他打招呼說“怎么你拿小號上了”,那個人的號就被封了)
* Password: 密碼
* Confirm Password: 確認密碼
* Secret Question: 密碼找回問題(找回密碼時需要回答這個問題,注意至少要8個字符長,而一個中文字似乎算一個字符,所以最后可能要打幾個問號補齊長度)
* Secret Question Response: 密碼找回問題答案
Quote: 座右銘,就是個簽名檔之類的東西
* Student/Professional: 學生/職業程序員
* = required 帶*的項目必填
填寫之后點Term of Use下面的I Agree,再點Submit,完成提交。除了用戶名別的以后似乎都可以改。
接下來進入Demographics頁面,這個大概相當于一個注冊用戶情況調查。
* Age : 年齡
* Gender : 性別(Male男,Female女)
* Ethnic Background : 民族背景(似乎選Asian or Pacific Islander就行吧……)
* Primary Interest in TopCoder : 在TC的主要興趣,看不懂的就選第一個吧,那個是說你的興趣在獎金……
* Shirt Size : T-Shirt大小(有的比賽會給排名前N的選手發T-Shirt,這里你需要選擇適合自己的大小,如果選最后一個說明你不想要T-Shirt,人家也不發你了。TC的T-Shirt還是挺好看的,比AStar的好)
* College Major : 大學的專業
* College Major Description : 這個不知道啥意思,隨便填點東西就行……
* Degree Program : 學位(從上到下分別為:準學士,學士,碩士,博士,中學生)
* Graduation Year : 畢業年份
* Graduation Month : 畢業月份
* Clubs / Organizations : 組織(一般選None,可以按住Ctrl點鼠標多選)
Other Clubs / Organizations : 其它組織
* School: 學校(點Choose School選擇學校,可以搜索,不過為啥shanghaijiaotong university才2個人注冊?!)
* Show / hide my school: 顯示/隱藏我的學校
GPA: 不懂的自己百度去……
GPA Scale: 同上
Resume: 簡歷
* How did you hear about TopCoder?: 你怎么知道的TC,如果選了“Member Referral”的話,需要填寫那個人在TC的用戶名(歡迎填寫sqybi~)
* = required
點Submit,進入Confirm頁面,確認信息。如果有誤可以點Edit修改,否則點最下面的Confirm提交。
接下來進入Success,提示你已經發送一封郵件到你的郵箱中,你必須去點擊里面的鏈接激活用戶。激活之后就可以使用這個用戶了。
登錄
登錄的方法一般都是使用Java Web Start。
在TopCoder主頁(http://www.topcoder.com/tc)最下方有一段話,第一句是“Load the Arena as an Applet or as a Java Web Start Application”。點“Java Web Start Application”,就會自動下載登陸需要的文件(一個jnlp格式的文件,本機裝了JRE/JDK才能打開)。經測試在IE7下這個鏈接似乎不管用,在Firefox 3下正常。
然后運行下載下來的jnlp文件,就打開了TC客戶端。第一次運行和有更新的時候會自動下載安裝程序,等待即可,很快。
在我這里有時會提示“語法錯誤”,但沒有任何影響,點“確定”就可以。啟動可能會慢一些,耐心等待。
然后輸入用戶名密碼,在Connection的地方選合適的登錄方式(一般Direct就行,如果不行的話可以試試別的或者用AUTODETECT自動檢測),在PROXY處設置代理,點GO登陸。這時可能還會提示語法錯誤,再確定就行,這個也沒有什么影響。
界面
下面的圖們來自原文,很經典,不打算改動了。請使用等寬字體瀏覽。
主界面:
-----------------------------------------------------------------------
|?? Advertisements.............?????????????????????????????????????? |
-----------------------------------------------------------------------
| Main | Lobbies | Options | Practice Rooms | Active Contests | Help ||
-----------------------------------------------------------------------
|???????????????????????????????????????????????? | Clock |?????????? |
-----------------------------------------------------------------------
| Rating Key | Who's here |???????????????? Chat Area???????????????? |
|???? .????? |??????????? |?????????????????????????????????????????? |
|???? .????? |??????????? |?????????????????????????????????????????? |
|???? .????? |??????????? |?????????????????????????????????????????? |
|???? .????? |??????????? |?????????????????????????????????????????? |
|???? .????? |??????????? |?????????????????????????????????????????? |
|------------|??????????? |?????????????????????????????????????????? |
| MESSAGES?? |??????????? |?????????????????????????????????????????? |
|------------|??????????? |?????????????????????????????????????????? |
|LEADER BOARD|??????????? |?????????????????????????????????????????? |
|------------|??????????? |?????????????????????????????????????????? |
|??????????? |??????????? |?????????????????????????????????????????? |
|??????????? |??????????? |-------------------------------------------|
|??????????? |??????????? | >>_______________________________________ |
-----------------------------------------------------------------------
Advertisements 廣告。
菜單項:
- Main里可以看在線名單和找人。
- Lobbies基本用不著,因為用戶一般都在Chat Room 1。
- Options里是一些選項和顏色設置。
- Practice Rooms里有大量的練習,都是以前比賽的題目
- Active Contests只有有比賽的時候才有用,顯示當前正在進行和將要進行的比賽以及比賽注冊之類的東西。
- Help里是....不用說了吧。
Rating Key: handle的顏色是隨著積分而改變的,這里顯示了積分與顏色的關系。
MESSAGES: 比賽的時候這里有注冊提示和clarification。
LEADER BOARD: 看每個room的最高分。
Who's here: 當前room里的人。
Chat Area: 聊天。
練習
在Practice Rooms里隨便選擇一個room就可以進入practice了。
界面與主頁面稍有變化,但基本相同,略去不畫。主要的變化就是Who's here分成了兩塊,多了一塊Who's assigned。這塊顯示的是誰被分到了這個room。因為是練習區,所以只要是在這里打開過題的都算是assigned。而在正式比賽中room是由TC分配的。這里顯示的是被分配到這個room的人。界面上還有一個變化是Chat Area頂上多了三塊。最左邊的是一個下拉菜單。里面有三個分值,選擇后就可以打開相應的題目。中間的summary可以看這個room里每個人的提交情況。
在practice room里只有coding phase。提交后要判的話需要自己選擇Practice Options(多出來的菜單項)里的Run System Test。
比賽
每次比賽(除了1年兩次的大賽)都需要在賽前3小時-5分鐘之間登陸注冊方可參加,注冊需要在Active Contest菜單中,選擇你要參加的那個比賽,再選擇Register。注意比賽前5分鐘注冊停止,這時候如果沒有注冊就不能參賽了。而注冊了沒有打開題目也視為沒有參賽,rating不變動。
然后TopCoder開始根據每個人的rating分配room,一般每個room都有高手和菜鳥,只不過如果你的rating高,和高手分在一起的概率高一些(當然也不一定是這樣,比如我上次就和yuhch大牛分在了一起……)
分配完成后,Active Contest菜單中Register一項變成Enter。選擇后可以直接進入你被分配到的room。Active Contest菜單最下面還有一項暗色背景的Room子菜單,可以進入各個room溜達。
進入自己room的時候一般離開始只有3分鐘左右,靜一下心就可以直接開始比賽了。coding phase的過程與practice基本相同。注意每題的得分是和用的時間相關(見前面的計分規則),而時間是從你打開該題開始算的。所以一題做完后可以不急著打開下一題,先放松一下。
75分鐘的coding后是5分鐘的intermission,這段時間是用來休息和聊天的。
然后就是最刺激的15分鐘challenge phase,也就是通常說的cha人。打開summary,雙擊別人的各題Score可以打開那題的程序,如果覺得有錯誤就可以點左下的Challenge然后輸入你認為他會錯的輸入數據,如果輸入數據合法那么系統會用標程的輸出和這個程序的輸出對比,如果出現不同則cha人成功。成功的話你能得到50分,對方該題分數為0;而如果失敗了,你會被減去25分。每個程序只能成功被cha一次,也就是說,如果有人cha掉了這個程序,你就不能再次cha。但是一個人可以cha某個程序很多次,直到這個程序被cha掉或者你放棄。
Challenge結束后就是System Test。這個過程一般比較慢,可以先走開做其他事,過20分鐘再回來看結果。System Test中的測試數據有兩種:一種是出題者準備的測試數據,一種是成功cha掉別人的數據。所以,TC中很少出現有bug的程序能通過System Test的情況。
結果出來后再過一段時間,就可以看到一系列message,比如rating更新了,新的practice room建好了以及可以通過主頁查看這次比賽的數據了。這時比賽就宣告結束。
注意事項
1.在TC主頁(http://www.topcoder.com/tc)上可以看到Next SRM,這是下次SRM的時間。注意我們的時間與他們剛好相差12小時,因此若時間是7月9日9:00 PM的話,這里是7月10日9:00 AM。還有要注意的是美國有夏令時,非夏令時的時候,還要再加1小時,就是7月10日10:00 AM。
2.Practice Rooms里寫的程序只要點SAVE就可以保存,下次login的時候還可以看到,但是比賽時候的程序必須Submit才可以在coding phase結束后保存(coding phase結束前還是只要SAVE就可以的)。
3.若想cha別人的程序,自己必須是正分(0分也不行),所以若沒有一題有正確的程序但有很好的數據的話,隨便交一道看上去正確的程序,然后在challenge的時候快下手,就可以賺到了。
4.客戶端自帶的編輯器只有基本的編輯功能和編譯及測試功能,所以若覺得不方便的話可以使用parser和plugin,TC主頁最下面有plugin的連接。每個plugin都有詳細說明文檔,這里不再贅述。
5.TC的FAQ:http://www.topcoder.com/?&t=support&c=index
6.最后一條,千萬不要作弊,會有嚴重的后果。
SRM的輸入輸出
SRM是不用標準或文件輸入和輸出的,只要寫一個類的一個成員函數。也就是說,你需要編寫的并不是一個完整的程序,而是一個類。
輸入是成員函數的參數,輸出用return,所以經常需要STL中的vector和string。
因為TC的系統并不測試標準輸出,所以標準輸出可以當調試用。
總結
以上是生活随笔為你收集整理的TopCoder入门教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: anaconda安装环境变量问题、pyt
- 下一篇: 哈尔滨的题目