1.題庫與網站資源
題庫-線上送出系統(Online Judge)簡介
下面是幾個比較大的線上送出系統(Online Judge)裡面有大量曆年的競賽題目,注冊一個ID,然後用自己熟悉的語言(一般有Pascal/C/C++/Java)寫好源代碼送出即可,會實時傳回資訊告訴你是否正确。采用黑箱測試,系統裡有一套标準的輸入輸出資料(對外保密,而且通常資料很多很怪),你的程式的輸出和标準輸出完全符合即可。
常見的傳回資訊有 AC(Accepted,通過)、WA(Wrong Answer,輸出有錯誤)、TLE(Time Limit Exceeded,逾時)、MLE(Memory Limit Exceeded,記憶體溢出)、RE(Runtime Error,發生實時錯誤)等,隻有AC了才算做對一題。這裡隻是一個簡要介紹,請大家在做題時先看看各網站上的FAQ,Enjoy it
北京大學 Online Judge(POJ) <http://acm.pku.edu.cn/JudgeOnline/> 建立較晚,但題目加得很快,現在題數和ZOJ不相上下,特點是舉行線上比賽比較多,資料比ZOJ上的要弱,有時候同樣的題同樣的程式,在ZOJ上WA,在 POJ上就能AC。不過感覺pku的題目要難很多。這個題庫的一大特點就是 Online Judge功能強大,其實pku現在已經是中國最好的ACM網站。
浙江大學 Online Judge(ZOJ) <http://acm.zju.edu.cn> 國内最早也是最有名氣的OJ,有很多高手在上面做題。打開速度快。
西班牙Valladolid大學 Online Judge(UVA) <http://acm.uva.es/>世界上最大最有名的OJ,題目巨多而且巨雜,資料也很刁鑽,全世界的頂尖高手都在上面。據說如果你能在UVA上AC一千道題以上,就盡管向IBM、微軟什麼的發履歷吧,絕對不會讓你失望的。
俄羅斯Ural立大學 Online Judge(URAL) <http://acm.timus.ru/>也是一個老牌的OJ,題目不多,但題題經典,我在高中的時候就在這上面做題的。
俄羅斯薩拉托夫國立大學(Saratov State University)(SGU) <http://acm.sgu.ru/>SGU 是俄羅斯薩拉托夫國立大學(Saratov State University)用于培養ACM選手的訓練網站。這個網站的建成時期較晚,但随着比賽的舉行以及新題目的加入,這個題庫的題目也日漸豐富。這個題庫的一大特點就是 Online Judge功能強大,它不僅使你避開了多資料處理的繁瑣操作,還能告訴你程式錯在了第幾個資料。這一點雖然與ACM的Judge有些出入,但是卻友善了調試程式。與UVA相比,這裡的題目在時間空間上要求都比較嚴格,而且更多的考察選手對算法的掌握情況,是以特别推薦沖擊NOI的選手也來做一做。
UsacoGate Online Judge(USACO) <http://ace.delos.com/usacogate>
全美計算機奧林匹克競賽(USACO)的訓練網站,特點是做完一關才能繼續往下做,與前面的OJ不同的是測試資料可以看到,并且做對後可以看标準解答,是以如果大家剛開始的時候在上面那些OJ上總WA卻找不到原因的話,可以試着來這裡做做,看看測試資料一般是從什麼地方陰你的。
網站資源:
http://www.608088.com acm很不錯的網站(資料很多),教育網也可以很快打開,acm社群.
比如:
acm算法介紹 算法模版 http://www.608088.com/category-5-1.html
各大OJ解題報告 http://www.608088.com/category-4-1.html
注意:還有一種非常重要的網站資源―――用百度搜尋你在oj上不懂的題目(例如:pku 1015),就可以看到了。也可以直接打“ACM”等等。有點看運氣,但是其實也有搜尋技巧在裡面。
2 學習資料說明
入門其實有兩種方法:1 自己看競賽書,看别人的程式等等。2 上題庫(如:pku和zju)做題。第一種可以較為系統的學到東西,但是時間久了就會無聊,而且長久實踐不足,程式設計能力永遠得不到真正的提高。第二種雖然看着自己AC很興奮,看着自己的帳号排名提高很開心,但是學習不系統,對較深的知識學習不足,總停留在做簡單題的份上。
最好的方法就是兩種方法相結合。作為入門者還是要以多看簡單競賽書多看題目和程式為主(例如:《資訊奧賽輔導教材》、《基本算法稿》、《06暑假教育訓練》和《基本算法C++》,都在“初級入門學習”檔案夾中),這個學習時間占70%,同時也要有30%的時間上題庫做題。畢竟理論學習要和實踐相結合。
3 一些話
真的很不确定這些資料可以起到多大的作用,但是唯一确定的就是自己當年如果有這些東西,那将是多麼~~~事實上這些資料确實對過去新加入的ACMer有很大的幫助。願它對每個看到這份資料的人都能充分起到作用!
ACM是什麼,ACM學習過程中會有什麼感觸。得到不同結果的人會說不同的話。但是唯一一樣的就是:無悔!
關于ACM的介紹還有入門的東西可以在“初級入門學習”檔案夾中的“ACM入門進階.rar”找到部分的答案,在百度和google搜尋也可以。這裡就不在多說。大學中可以學的東西很多很廣,計算機專業包括的東西也一樣。具體怎麼樣,大家隻要走進西門兩家書店便一目了然。如果說程式語言是計算機專業的基礎,那麼ACM充當這個基礎的角色一點都不過份。ACM中可以學到的是對程式設計語言的深入了解和應用,同時培養出來的是模組化和轉化模型的能力,也是解決問題的能力。這些是優秀計算機人應有的基本。
有人說:“如果再來一次大學,我會在大一大二瘋狂搞ACM,參加省賽,參加區賽,參加世界賽,然後大三開始做項目~~”問題是你參加了世界賽就算不拿獎你也有資格可以去微軟和google了。ACM是大學生四大競賽之首,沒有水分,完全考平時做題思考積累的實力拼搏。這幾年國内ACM的發展太快,難度增大,牛人更牛更多,競争更加悲慘。華師在兩年前參加ACM的人不到10個,現在不下200人。華師的發展隻是全國其他高校延後了幾年時間的一個縮影。但是這是社會進步帶來的我們不得不面對的結果。例如前面幾屆的師範專業老師就會有到了學校要面對比他厲害十倍的學生的尴尬場面。非師專業也有面試網易騰訊等公司時因為寫不出算法而與高新offer無緣的情況。這裡更想說的是ACM的好處,而不是讓大家在壓力下不得不學它,要知道許許多多的計算機領域幾乎與 ACM無關(例如網頁制作,flash等)以上這些話是回答那些說ACM沒用的人的,不包括對其充滿熱情的人。
其實ACM的公平不但展現在競賽現場上(通過測試資料就算赢,不管你程式怎麼寫),而且還展現在學習的過程上。這點需要詳細說明一下。
1:學習的方法幾乎一樣入了門之後大家都是在題庫上拼命做題。全世界沒有一個人例外。
2:自學是唯一的方法。ACM不是看懂的,也不是聽懂的,而是練懂的。懂的唯一方法就是要多練多寫。在賽場上無數悔恨的根源就是平時訓練做題時對沒有完全了解的知識抱有幻想。台上一分鐘台下十年功!
3:大家平時的生活都是:
<http://acm.pku.edu.cn/JudgeOnline/> 、 <http://acm.zju.edu.cn/><http://acm.zju.edu.cn> 、<http://acm.uva.es/>。