想參加計算機奧林匹克競賽,要怎麼做?需要學習什麼?
本人非常喜歡計算機,現在初三,成績比較優秀,對於計算機相關知識都有一些基礎,如編程,網路等都懂一些,比較零散。從什麼時候開始系統學習比較好?競賽需要學習什麼?學校里有老師和各種資源支持。
信息學競賽以演算法為主,建議學習一些基本演算法,如搜索、貪心、動態規劃等。
可以考慮中考後開始學習信息學,有老師和學長帶最好,我高一的時候就是學長出了幾套模擬題然後做完以後慢慢找到感覺的。知識點可以參考《演算法競賽入門經典》,可以到洛谷OJ刷題。
NOIP要爭取拿到一等獎,這幾年大概400分以上(滿分600)一等獎就穩了。不僅NOIP級別的題要做得熟練,還要練一下考場策略,因為NOIP時間比較緊,一場只有3.5h,如果不幸考場上卡在一道題上然後考炸就GG。認真對待平時參加的模擬賽。
謝邀,還是學到noip程度,拿個一等就放手吧。
noip之後的事情,沒有絕對的實力,肯定會在省選或noi被不明黑惡勢力整gg的。
謝邀,本人競賽黨
先明確問題,「學校里有老師和各種資源支持」,是指什麼?信息學競賽教練和優秀學長以及各種模擬題、課件、人脈資源?還是教信息課的老師和機房資源?如果是前者,請自行略過後面的回答,去找你的教練、學長諮詢;如果是後者,那就當做什麼都沒有,純靠自己就好了。說實話這類問題破乎上的答案參差不齊(比如我這篇就是屬於不好的)。。。
(tips:良莠不齊形容人,感謝評論區dalao指正~)
我的想法是,先結識一個願意解答你問題的dalao,他可以在你的各個階段給你幫助。
自學完C++的面向過程部分,適當學一點構造函數、析構函數、運算符重載。
然後開始看書、看博客、做題來學習演算法和數據結構。《挑戰程序設計競賽》這本書確實很好,但有一些寫法/叫法與國內有些不同,建議與《演算法競賽入門經典第二版》結合起來看,每個知識點都去網上搜一下國內的博客是怎麼講、怎麼叫、怎麼寫的。叫法和寫法以網上著名oier博客(如hzwer,PoPoQQQ,ATP等)為主,他們的博客能代表當下信競圈的普遍寫法甚至可以說是先進寫法。
學習順序方面,先學排序、貪心、搜索等的基礎演算法和隊列、棧、(樹、)並查集等的簡單數據結構,然後俺爸不同領域學習:圖論中的最短路、生成樹、強聯通分量,數據結構中的樹狀數組、線段樹,動態規劃各類經典模型和各種做不完的變態題目,數論中的計數原理,整除,模,同餘,費馬小定理,gcd,exgcd,crt,高斯消元等。
一邊學一邊做題。
題目網上一抓一大把,題解也是一抓一大把,自己找著做,推薦洛谷,尤其是洛谷上帶翻譯的USACO的題,做做這些題入個門。想找其他題可以去著名oier博客挑一挑,或者外出培訓的課件。實力水平提高後,可以打打模擬賽,hzw博客中有一些模擬題,洛谷有很多比賽,codeforces經常舉辦比賽,atcoder的比賽也不錯。注意做好總結,可以通過寫博客來記錄學過的知識,做過的題和掉過的坑。
你還需要適當參加競賽培訓班,知道要學什麼、怎麼學、學到什麼程度、做什麼樣的題。各校比較良心的集訓起點很高,國內比較成熟的信競培訓機構可能只有清北學堂這一家,不過挺坑錢的。。。。。
(更正:洛谷的網課辦的還蠻火的,單看人數規模完爆清北。但我周圍沒怎麼有人去過,具體怎麼樣我也不是十分清楚,據說口碑不錯)
每個省都會舉行夏令營,有些還會舉行冬令營,這是培訓的好時機,還可以結實很多小夥伴。
這類問題破乎上很多,你可以看看dalao們都怎麼說。至於如何辨別是不是dalao,看評論區就好。。。一般dalao發個答案會被各種膜。。。
走到這裡大概NOIP水平吧,再往後怎麼走,我也沒法跟你說。
畢竟這裡不過是一個NOIP爆炸的菜雞loser,混吃等死ing
tips:計算機等級考試沒用的,就算你考了四級,聯賽也不一定能拿省二,搞不好連初賽都過不了(其實這個等級考試跟競賽有關聯的東西非常少。。難度也是天壤之別。。我沒見過哪個985學生說我計算機等級考試如何如何的。。甚至(可能)不屑於去考吧(如果有錯誤還請指出,我接著刪除。。))
補充一下,競賽學習的側重點和大學課程有很大不同,想知道怎麼學最好不要去看一些大學課程的學法,不要看一些大學的書本(《演算法導論》除外,不過初學者不建議看算導)。自己在知乎搜一下NOIP相關問題就有很多dalao關於如何學的回答。或者可以加一些OI群去諮詢。
謝邀,建議先去參加數學競賽。
學校裡面既然有老師和各種資源支持,那麼有一個良好的環境get
學習NOIP,對於初學者來說,可以去買信息學奧賽一本通,內容比較基礎,但是適合新手上手。跟著那本書裡面的內容一步一步走,學習完一個要點就去上一個online judge刷題(推薦洛谷
首頁 - 洛谷 | 計算機科學教育新生態?www.luogu.org)差不多初期的基礎語法上試煉場,然後每一個演算法用tag搜索做5道題目,最好不看題解完成。
然後如果那本書學的差不多了,像演算法導論啊,挑戰程序設計競賽啊之類的都是好書,都推薦買來看,然後還有國內一些神犇的blog也是很好的,當然還是看完做題,鞏固要點。
數學方面也要打下基礎,比如高中數學書全買,大學數學書買下和數論有關的東西看+做題就可以了
趁著初三可以先買一本lrj的紫書(演算法競賽入門經典)看著,或者是演算法導論(但是這本書上全是偽代碼,沒有代碼),在一些入門的oj上多刷題(個人推薦洛谷),如果時間夠找找學校老師看能不能報個普及組甚至是提高組,如果不行也沒事,找一所OI強的高中,進去之後跟著培訓,跟著老師走不會有什麼大問題。
注意:一定要找個OI強的高中!這樣的高中代表著你有有經驗的教練,有幾代學長留下來的好題和好題的題解,有許多志同道合的人能夠與你一起討論。你要知道如果純靠自學的話,除非是天賦異稟,否則十有八九干不過科班出身。
刷題的話先把基礎的東西搞好後練一練這些,應該都是比較基礎的東西:
- 搜索、模擬和貪心
- 簡單的動態規劃,比如背包除了多重背包是一定要看的
- 字元串方面會一些簡單的處理,最好能會哈希,這個特別有用
- 數學的話至少要把gcd搞懂吧,要是再往深里去可以看看exgcd,再學一下素數篩
- 數據結構,比如棧、隊列、並查集、線段樹、樹狀數組之類,還可以看一下st表以及單調棧和單調隊列
- 圖論的最短路演算法,像Floyd(這個效率慢但是有的時候還需要用它來傳遞閉包)、SPFA和dijkstra演算法(這個可以看一下堆優化),還有最小生成樹的kruskal和prim演算法。像是強連通分量啊網路流啊二分圖啊如果有基礎的話也可以看看,但是這些就屬於比較靠後的內容了
OI這種東西越早學越有優勢。如果有資源的話儘早的去利用。多刷題,多看書,多看一些網上的演算法博客,有老師或是學長的話可以常去諮詢,初三的話不必太在意現在的成績怎麼樣,就算現在沒什麼成績,上了高中之後你也可以把大量的別人用來入門的時間拿去學更高深的東西。
最後再次強調一點:盡量去上一個OI的強校!最好是OI成績能拿出來做招牌的那種!有人帶和自學的難度係數是天塹!
以上。
註冊一個洛谷賬號,就打開了一扇新的大門。
本人當初也像一個初學者一樣慢慢走過來的。。。先要明確自己的目標,是想拿到省一等獎就結束還是繼續省隊選拔,進軍國賽。是自己就是對計算機有愛好,想編寫一些小程序,還是就是想拿獎,順便降分。。。本人屬於前二者,剛開始沒想過拿獎項,沒想過競賽的最終目的,就是當作興趣每個星期學一點。。。是這樣如果你是作為興趣的話,暑假可以每一本演算法競賽入門經典先看著,等到上高中每個星期學上一點內容,慢慢變多,循序漸進,文化課幾乎不耽誤。但是編程實力最多省一等獎(比如我)最後參加學校的集訓。。。一般省二,省一就沒問題了(省一要一定的努力,省二就。。。)
如果就是本著老子就是要進省隊,拿國家金牌!那我建議,假期(建議中考過後大把時間)買一本演算法競賽入門經典,參加高中暑假舉辦的集訓,多向學長問一些問題,了解一下行情,就開始像準備中考一樣,一點一點學吧。有空閑時間就打代碼,做好拋棄文化課的準備(就是說語數外之類的統統都是次要的,當時我都不敢相信有這種事。。。),這些我在初中都是不敢想像的,我認為最好的途徑還是假期先買一本入門經典,然後找個學長好好講一講到底是怎麼回事。。。我當時就是因為愛好學玩玩,最後想好好學也晚了。祝你能選一條屬於自己的路!
現在這會兒初三的話。。。
17年的NOIP已經結束了,18年的NOIP在10月份,不過到那時你已經是高一了。
建議你進這裡NOIP2017複賽獲獎名單,到提高組一等獎名單那裡找你所在的省份,看哪幾所學校獲獎最多,然後拼勁全力往那裡考,如果考不上的話哪怕交錢也要去那裡。
首先謝邀懂得不必要太廣但決不能太淺,我現在高三,想考個二級,再加一次競賽,但是競賽的基本都是大佬,先來一個二級比較OK,四級過了就應該完全OK了
推薦閱讀: