本文已經轉移到了:http://harryguo.me/2015/11/03/ACM-%E5%85%A5%E9%97%A8%E6%8C%87%E5%8D%97/
什么是ACM?
想必打開這篇博客的人已經知道什么是ACM了吧,如果不知道,請自行百度或者谷歌
搞ACM需要學習什么知識?
搜索引擎
這里不是讓你設計一個搜索引擎,而是讓你學會正確使用搜索引擎,當你有任何不解的時候(包括閱讀下文),問問谷歌或者百度,這不只是ACM才需要的技能。
一門編程語言
雖然現在編程語言總類繁多,有些OJ也支持多種語言,不過C++還是搞ACM不二的選擇,另外最好也學會使用java,因為無論在什么地方,什么國家,什么網站的比賽,C++和java都是支持的。ACM是算法的比拼,所以並不需要將編程語言鑽研過深,畢竟語言只是工具。
良好的英語
ACM是國際比賽,英文交流能力是無可后非的。英文差,但是想搞怎么辦?對於這樣的問題,我的答案是:請自行學習英語,世上無難事,只怕有心人。
數學能力
算法算法,無論怎樣都脫離不了數學。我認為,幾何學、線性代數、離散數學、初等數論和微積分是必須掌握的。太多了怎么辦?這點請放心,你可以在不斷的比賽中積累這些知識。
在哪里可以訓練/做題?
可以在OJ上訓練
全球有非常多非常多的OJ,即Online Judge,在線評測平台,他們可以將你的代碼進行在線評測,來判斷正誤。推薦的國內的OJ有CDOJ(電子科技大學),POJ(北京大學),HDUOJ(杭州電子科技大學),BNUOJ(北京師范大學)。
如何提交我的代碼
我不打算詳細講解,所以可以的話,請看每個OJ的F.A.Qs,英文怎么辦?自己想辦法。
有沒有線上的比賽
國內的線上比賽有HDU的bestcoder,這個是有獎金的比賽,國外的推薦codeforces,會不定期的進行比賽,比賽的難度適合新手(英語較好),另外就是Topcoder,這個是相當有名的比賽,不過入手較為困難,你可以百度或者谷歌相關教程,這里就不詳細解釋了。這些比賽都有着積分的規則,簡單說,你打得好,積分就會上漲,否則下跌。高排名總是被各大公司相中,如Google、阿里等,特別是Topcoder,在這里的高排名相當有價值。
推薦的書籍?
英語我就不推薦了,自己想辦法。下列書籍中的任何習題,都推薦去完成。
編程語言類
《C++大學基礎教程》作者是Deitel,這個作者所著的編程書籍都是值得學習的。
算法入門類
《挑戰程序設計》,《算法競賽入門經典》作者劉汝佳。
數學類
《組合數學》,《算法導論》,《具體數學》
常見的問題
算法無法理解
多看書,多想,細細琢磨,別人能懂,你也可以。問問老師同學,周圍的大牛肯定有人知道。
這道題怎么做,完全不會
碰到不會的題是很正常的事,此時你就需要搜索題解,怎么搜索?當然谷歌百度。
那些家伙為啥那么厲害
勤能補拙,每個大神的背后都有着辛勤的付出。凡事靠堅持,每個人都有着無限的潛能,也許你會看見比你更厲害的大神,但只要你努力,你就是下一個大神。
學習這個會不會占用我很多時間
有得便有失,投入和專注是獲得成績的充要條件。
最后的話
時間不會因為你的猶豫而止步,既然你決定了搞ACM,那么就應當立馬開始行動,要知道有很多人已經在你的前面走了很遠。