ACM 怎麼樣零基礎到入門?

ACM 怎麼樣零基礎到入門?



居然沒人提這個



————2016-10-10更新————

距離第一次回答已經過去將近一年的時間了,感覺時間過的好快。。

雖然沒什麼進步,但回過頭來看,確實有了些新的體會。。

儘管開始走了不少彎路,但我發現並沒有捷徑可走,努力一定是必須的,唯一我覺得值得注意的,是學習的知識的時候一定要有計劃分模塊,這樣效率最高,比如這幾周來做搜索,下幾周來做最短路。

我現在用的書主要就是那本挑戰,覆蓋的面足夠廣,代碼精鍊可以做模板,內容簡潔對於有基礎的人來說學起來速度快,這本書對於我這個水平來說綽綽有餘,最主要的是它就是分模塊來寫的,而且每個模塊都提供的大量的例題供讀者練習。

這個系列的2最近也剛剛翻譯好上市了

我也是第一時間買到,大概看了一下,這本更偏重於基礎的演算法,同時相比1增添了更多數據結構的講解,所以我感覺完全可以用這本入門,用1來進階。

其他學習的途徑也有不少,不知道做什麼題的話,kuangbin大神的博客里有poj、hdoj的題目分類;網上還有很多國家集訓隊的論文,也是非常好的學習資料;沒事去Codeforces、Bestcoder上做做比賽,刷刷分,也能增加很多樂趣。

——————以下是原答案——————

本人目前大二,也是從大二開始搞ACM的,之前一點不了解這個,剛開始入門對我也挺難的,因為開始沒怎麼有人帶。

啊哈!演算法是我的第一本演算法書,個人感覺這本書真的非常棒,因為他把一些稍微複雜難懂的演算法知識解釋的十分通俗易懂,非常適合新手,現在我也一直常翻,裡面的內容有些我還沒有掌握好(我也是弱菜一枚…)。

如果進階的話,可以看挑戰程序設計競賽

或這個

這兩本後者內容更詳細一些,不過都不好啃,畢竟搞這個本來就不容易…

最後,最最重要的是多做題鞏固,題量還是關鍵,也要多總結,一起努力吧


貌似沒人提到USACO Training Program Gateway,這是我認為最好的入門方式。刷完前三章NOIP省一,刷完全部就進省隊能去NOI(強省的請勿吐槽)。其他題庫的話就自己隨意選了。書必須推薦《演算法導論》和劉汝佳的黑書。

第一的答案說抱大腿,其實我不同意。我高中就是和同學一起練習(當時都很菜),主要還是得靠自己,有個志同道合的朋友一起交流的話學習的效率會比較高。


1.看書;

2.刷題;

3.天賦。

--------------------

關於看什麼書,去哪裡刷題,上面的回答都有了,這裡不說。等你察覺到天賦的重要的時候,你就可以不做ACM了,改去做項目、做工程了。


題主問的是如何從零基礎到入門,那麼此問題下眾多以推薦書和OJ的答案對於一個可能連語言關都沒有過的小白來說並沒有什麼太大的幫助。就算是標著入門的《演算法競賽入門經典》,新手指望著它來既學語言又學演算法也是具有不小的難度的。

對於小白來說,想要搞ACM,最重要的是找到組織,也就是加入你們學校的集訓隊,這裡我的建議是在學習網站(網易雲課堂,計蒜客等)先找一些語言課程,把基本的語言關過掉,然後找一些簡單的水題來刷(水仙花數、多實例輸入輸出等,這裡推薦zzuli oj,中文題目較多,可以刷掉前一百道),不會可以搜題解,但理解之後一定要親自動手再寫一遍。刷夠一定數量,找到了做題的感覺,基本上就達到了入門的要求,接下來參加學校ACM集訓隊的招新選拔,弱校一般能過,強校的話可以考慮再花點時間多刷點題,買些入門演算法書看。找到組織有人帶,也就算是成功入坑了。


瀉藥, @余翔。

  1. 學好一門語言
  2. 學好基礎的數據結構
  3. 學好基礎的演算法
  4. 開始在各大OJ上做題目
  5. 接觸各種高級數據結構
  6. 接觸各種高級演算法
  7. 繼續在各大OJ上做題目
  8. 接觸各種奇怪的問題和解法

我也只能講到這裡了。


我們計蒜客就有呀~這個課程的作者是 ACM 國家金獎、國際進入 Final 的大牛@楊博洋。

地址:程序設計競賽入門


一本書就夠了,演算法藝術與信息學競賽



吶 編程之美右邊的都是.....當然我沒看幾本 我覺得演算法博大精深 急不得 要想立刻拿成績 還是去玩玩數模機器人?反正這是我感受的入門也慢 進步也慢 拿獎更慢的東東


《演算法競賽入門經典》,《演算法競賽入門經典訓練之南》按順序讀並做題


首先,你要學一門課,這門課叫《計算機導論》。

隨後,參加學校內的選拔賽。


1,台灣師範大學ACM演算法入門教程(繁體)

2,挑戰程序設計競賽(第2版)

《圖靈程序設計叢書:挑戰程序設計競賽(第2版)》 秋葉拓哉, 岩田陽一, 北川宜稔, 巫澤俊, 庄俊元, 李津羽【摘要 書評 試讀】圖書

3,多做題

多做題比什麼都強,不做題肯定學不會的,我就是失敗案例。

4,別著急,目標定低一點,分主題學

你就先整一個知識點,反覆看,反覆練,有點成就感了再搞下一個。

千萬別追求速刷所有知識點,蜻蜓點水沒用的。


不一定上來就要看書~在保證C語言基礎紮實的情況下可以去蹭一下各種新生賽,學一些基礎的演算法,動歸貪心什麼的,遇到不會的題再百度題解或者翻書


刷題,看書


推薦閱讀:

現在 C 語言可以設計 FPGA 么?
pthread_cond_wait 為什麼需要傳遞 mutex 參數?
在哪裡可以找到C語言標準庫的實現源代碼?
為什麼知乎用戶vczh不建議初學編程的人把C作為入門語言?
C語言的取余運算 a%b,如果a<b,那取余a,2%3=2,25%26=25,這是為什麼,規定?

TAG:C編程語言 | ACM競賽 |