入門
ACM入門可以從語言凡恍、算法志秃、閱讀能力三個方面著手。
語言基礎
語言基礎偏指編程語言基礎和其他計算機技能基礎嚼酝。IPCP世界總決賽使用的語言有C/C++浮还、Java、Python2/Python3以及Kotlin闽巩。各分賽區(qū)支持的語言有所差異钧舌,但一定支持C/C++和Java。中國大學的計算機課程教授C++和Java語言涎跨。
提升編程能力需要多實踐洼冻,多在計算機上實際操作。C語言自學入門推薦從《C Primmer Plus》開始隅很,不必事無巨細地掌握書中的知識點撞牢,但求掌握語言框架理清思路,及時完成章節(jié)后面的思考題和練習題叔营。C++/Java的學習可緊跟課程進度屋彪,完成課堂練習。
在計算機專業(yè)绒尊,課堂上學到的東西永遠是不夠的畜挥。
算法基礎
算法基礎涉及數學能力以及算法知識。ACM是綜合性的比賽垒酬,算法知識是重點考察的內容砰嘁。
《算法導論》可能是程序人的“新華字典”。它是一本介紹算法知識的書籍勘究,內容比較難,需要一定的數學基礎斟冕。它并不是為ACM專門編寫的書口糕,但能實實在在地提升讀者的算法水平。
此外磕蛇,有許多ACM選手津津樂道的優(yōu)秀書籍景描。比如清華大學出版社的《ACM國際大學生程序設計競賽》系列叢書,以及《算法設計與分析——以ACM大學生程序設計競賽在線題庫為例》等秀撇。它們是專為ACM比賽編寫的超棺。
閱讀能力
IPCP的試題語言為英文,選手需要一定的英文閱讀技能才能理解題目呵燕。不過不必刻意提升這方面能力棠绘,隨著做題數量的增多,英語閱讀能力自然慢慢增強。一般而言氧苍,比賽主辦方允許選手攜帶字典參賽夜矗。
練習
互聯網為程序人提供了實實在在的便利。有許多網上測評系統(tǒng)可以助我們一臂之力让虐。這些線上測評系統(tǒng)題目難度由淺入深紊撕,風格各有特色。不必等到掌握一門編程語言再開始在網上練習赡突,它們題目的梯度技能滿足剛剛開始學習語言的新同學对扶。完全可以邊學邊玩邊練習。
第一階段的練習不妨從杭州電子科技大學的在線評測系統(tǒng)(HDOJ)和北京大學的在線評測系統(tǒng)(POJ)開始惭缰。北京大學的在線評測系統(tǒng)可能是中國最早的線上評測系統(tǒng)之一浪南。它的網站模板是開源的,因此許多在線評測系統(tǒng)(包括航電OJ在內)使用的是它的模板从媚。盡管POJ似乎已經超過兩年沒有舉行過線上比賽了逞泄,但POJ一直是編程愛好者十分熱衷的網站。HDOJ在POJ的基礎上做了一些調整和改進拜效。HDOJ不斷舉行賽事喷众,剛剛舉辦過百度之星線上競賽。理論上可以從任何一個OJ開始玩紧憾,但基于上面的原因我推薦從航電OJ開始玩到千。
可以先試著解決OJ的第一道練習,題目編號通常為1000赴穗。通過解決編號1000的題目會使你對整個OJ的流程有所了解憔四。遇到問題不妨看看OJ的FAQ(Frequently Asked Questions)。討論區(qū)臥虎藏龍般眉,時常有大神分享自己的成功代碼了赵。
看FAQ時可以了解到OJ使用的編譯器和其他運行環(huán)境信息,大多數OJ使用的C語言編譯器支持C99標準甸赃,也就是《C Primer Plus(第五版)》中介紹的C標準柿汛。(也就意味著C11標準不能使用,影響比較大的一點是:不能在for循環(huán)中的第一個語句初始化循環(huán)控制變量)
下面介紹一些OJ的黑話埠对。AC=Accepted络断,程序判定為正確解答。AK=All Killed项玛,在比賽時限內做完所有賽題貌笨,無題可做了。線下比賽可能有學長送你小紅花襟沮。PE=Presentation Error锥惋,程序正確但是輸出的格式不對昌腰。WA=Wrong Answer,程序寫得不對哦净刮。CE=Compilation Error剥哑,程序格式不對無法編譯。TLE/MLE/OLE=Time/Memory/Ouput Limit Exceeded淹父,超出時間/內存/輸出限制株婴。
把航電OJ的5000道題差不多做完或者想換換OJ的時候,可以嘗試在Virtual Judge上接觸更多題目暑认。Virtual Judge近年來逐漸流行困介。本質上Virtual Judge不是一個OJ,它能夠在別的OJ上抓取題目并且能讓你提交自己的解答蘸际。也就是說在VJudge一個平臺上你可以做到許多其他OJ平臺的題目座哩。目前VJudge支持的OJ有POJ、ZOJ粮彤、UVALive等32個OJ根穷。
比賽
不時參加線上比賽對提升能力很有幫助。許多OJ會不定期地舉辦比賽导坟,這里介紹HihoCoder屿良,Hiho不定期舉行比賽。有的賽事獎品頗豐惫周,喜歡的同學千萬不要錯過尘惧。
鏈接
Lightyears在Github上維護了一個倉庫,打算把他自己對航電OJ題目的解答放到倉庫里递递。目前倉庫還處于初始階段喷橙,有興趣的同學不妨看看吧。
[文] Lightyears