Ⅰ 如何在一年內ACM/ICPC從小白變world final 大神
如果想進World Final,光刷水題完全沒有意義,水題數量限制在50-100個以內,熟悉下語言和題目。然後開始基礎演算法學,再學高級演算法,最重要的是多參加比賽。
Ⅱ topcoder演算法比賽,該怎麼准備
topcoder中的牛人可以說是職業選手了,高中時NOI IOI,大學時ACM,秒殺基本的題型沒有什麼問題。
如果你在讀書,可以參加學校的NOI IOI 或ACM,會得到很好的鍛煉,現在也有很多ACM的練習網站。除了topcoder自己的競技場,還可以去國內的acm站點做題:
acm.pku.e.cn 北大,每題有bbs討論
acm.zju.e.cn 浙大
acm.scu.e.cn等等
topcoder中練習比較好的一個地方是你可以看到已完成比賽的代碼,不過如果不理解演算法,要看懂還是比較困難,可以多看幾個人的,相互比較比較 呵呵
Ⅲ 參加ACM大賽應該准備哪些課程
課程:
(1)基本演算法: 二分,分治,貪心
(2) 離散數學離散數學動態規劃
(3) 搜索演算法:深度優先 搜索,廣度優先搜A*演算法 ,阿爾法貝塔剪枝
(4)數據結構:線段樹, 樹狀數組,並查集,Trie圖
(5)圖論問題:最小生成樹 最短路 強連通分量、橋和割點
(6)網路流演算法:基本的網路流演算法,Dinic演算法,帶上下界的網路流,最小費用流
(7)計算幾何:線與線求交,線與面求交,求凸包,半平面求交等
(8) 離散數學,高等數學,線性代數,初等數論,計算幾何
(9)計算機專業英語
(10)C++;基礎的遞歸、枚舉演算法
1.參賽隊伍最多由三名參賽隊員組成。
2.競賽中命題10題左右,試題描述為英文,比賽時間為5個小時,前四個小時可以實時看到排名,最後一小時封榜,無法看到排名。
3.競賽可以使用的語言:java, C, C++, Kotlin 和 Python。
4.重點考察選手的演算法和程序設計能力,不考察實際工程中常用的系統編程,多線程編程等等;
5.選手可攜帶任何非電子類資料,包括書籍和列印出來的程序等,部分賽區會對選手攜帶的紙質資料做限制。
6.評委負責將結果(正確或出錯的類型)通過網路盡快返回給選手,除此之外不提供任何額外幫助;
7.每個題目對應一種顏色的氣球,通過該題目的隊伍會得到對應顏色氣球。每道題目第一支解決掉它的隊還會額外獲得一個「FIRST PROBLEM SOLVED」的氣球。
Ⅳ 藍橋杯全國軟體大賽的賽程如何,參加藍橋杯需要具備哪些條件
藍橋杯是大學生IT學科賽事,由工業和信息化部人才交流中心主辦。 為推動軟體開發技術的發展,促進軟體專業技術人才培養,向軟體行業輸送具有創新能力和實踐能力的高端人才,提升高校畢業生的就業競爭力,全面推動行業發展及人才培養進程,工業和信息化部人才交流中心特舉辦“全國軟體專業人才設計與創業大賽”,大賽包括個人賽和團隊賽兩個比賽項目,個人賽設置:1、C/C++程序設計(本科A組、本科B組、高職高專組)2、Java軟體開發(本科A組、本科B組、高職高專組)3、嵌入式設計與開發(大學組、研究生組)4、單片機設計與開發(大學組)5、電子設計與開發(大學組),團隊賽設置:軟體創業賽一個科目組別。
1、組別
個人競賽分為:c/c++本科A組,c/c++本科B組,c/c++高職高專組,java本科A組, java本科B組,java高職高專組,嵌入式設計與開發大學組,嵌入式設計與開發研究生組,單片機設計與開發本科組,單片機設計與開發高職高專組,電子設計與開發本科組,電子設計與開發高職高專組共12個組別。每位選手只能參加其中一個組別的競賽。
2、時長
軟體比賽:4小時,全程封閉。
電子類比賽:5小時,全程封閉。
3、形式
軟體類:全程機考。
選手機器通過區域網連接到各個分賽區的競賽伺服器。
選手答題過程中無法訪問互聯網,也不允許使用本機以外的資源(如USB連接)
以“伺服器-瀏覽器”方式發放試題、回收選手作答。
電子類:動手操作。
4、參賽選手機器環境
X86 兼容機器,內存不小於1G,硬碟不小於60G
Windows NT 內核系統(WindowsXP, Windows2000等)
c/c++ 開發環境:
Dev-cpp 5.4.0 支持ANSI C,ANSIC++,STL
c/c++ API 幫助文檔(中文,chm格式)
Java 開發環境:
JDK 1.6
Eclipse Helios for JavaSE
API 幫助文檔(中文,chm格式)
5、題目形式
軟體類競賽題目完全為客觀題型,選手所提交作答的運行結果為主要評分依據。
(1)填空題
題目為若干具有一定難度梯度、分值不等的結果填空題或代碼完善填空題。
結果填空題
題目描述一個具有確定解的問題。要求選手對問題的解填空。
不要求解題過程,不限制解題手段,只要求填寫確定的結果。
代碼填空題
題目描述一個具有確定解的問題。
題目同時給出該問題的某一解法的代碼,但其中有缺失部分。
要求選手讀懂代碼邏輯,對其中的空缺部分補充代碼,使整段代碼完整。
只填寫空缺部分,不要填寫完整句子。
(2)編程題
題目為若干具有一定難度梯度、分值不等的編程題目。這些題目的要求明確、答案客觀。
題目一般要用到標准輸入和輸出。
要求選手通過編程,對給定的標准輸入求解,並通過標准輸出,按題目要求的格式輸出解。題目一般會給出示例數據。
一般題目的難度主要集中於對演算法的設計和邏輯的組織上。理論上,選手不可能通過猜測或其它非編程的手段獲得問題的解。
選手給出的解法應具有普遍性,不能只適用於題目的示例數據(當然,至少應該適用於題目的示例數據)。
為了測試選手給出解法的性能,評分時用的測試用例可能包含大數據量的壓力測試用例,選手選擇演算法時要充分考慮可行性的問題。
6、涉及知識
Java高職高專組
解題所涉及的知識:基本語法、面向對象、網路編程、介面、集合、IO、多線程、內部類、異常。(數據結構、swing等圖形界面不涉及,不涉及html、JSP、Tomcat、開源框架等web開發方面,不涉及JDBC、SQL等資料庫編程方面)
解題允許使用的特性:JDK1.5支持的全部特性
Java本科B組
解題所涉及的知識:Java高職高專組全部知識 + 數據結構(高校《數據結構》教材中出現的經典結構,及其通過組合、變形、改良等方法創造出的變種)
解題允許使用的特性:同java高職高專組
Java本科A組
解題所涉及的知識:Java本科B組全部知識 + 設計模式,反射,XML,多核與並發,測試理論,Swing界面。
解題允許使用的特性:同java高職高專組
c/c++高職高專組
解題所涉及的知識:結構、數組、指針、標准輸入輸出、文件操作、遞歸
(在代碼填空中不會出現c++知識,不會出現ANSI C之外的windows API調用)
解題允許使用的特性:選手可以使用c風格或c++風格或混合風格解答編程大題。
允許使用ANSI C++特性。允許使用STL類庫。
(不允許使用MFC類庫,ATL類庫)
c/c++本科B組
解題所涉及的知識:c/c++高職高專組全部知識 + 數據結構、函數指針、位運算
解題允許使用的特性:同 c/c++高職高專組
c/c++本科A組
解題所涉及的知識:c/c++本科B組全部知識 + 函數模板、復雜宏、匯編知識
解題允許使用的特性:同 c/c++高職高專組
單片機設計與開發(本科組,高職高專組)
模擬、數字電路,感測器及MCS51系列單片機的相關知識,常用儀器使用方面的知識,程序編譯調試和下載軟體使用方面的知識。
嵌入式設計與開發(大學組)
模擬電路,數字電路,感測及STM32F103 MCU的相關知識,常用儀器使用方面的知識,Keil MDK4.10軟體方面的知識。
電子設計與開發(本科組,高職高專組)
模擬電路,數字電路,感測器及電力電子等相關方面的相關知識及應用,電子元器件知識及應用,常用儀器儀表使用方面的知識。
7、評分
軟體類
填空題:答案唯一。
程序填空題:按選手填寫的代碼代入程序中能否得出正確結果為判據。
編程大題:主要以選手所提交的程序的運行結果為依據(大於90%);同時會參考選手程序的編碼風格、邏輯性、可讀性等方面(小於10%)。
單片機和嵌入式類
硬體設計約佔25%,軟體編程及調試約佔60%,其他約佔15%。
電子設計類
硬體設計約佔45%,裝調約佔35%,其他約佔20%。
8、注意事項
(1)選手必須符合參賽資格,不得弄虛作假。資格審查中一旦發現問題,則取消其報名資格;競賽過程中發現問題,則取消競賽資格;競賽後發現問題,則取消競賽成績,收回獲獎證書及獎品等,並在大賽官網上公示。
(2)參賽選手應遵守競賽規則,遵守賽場紀律,服從大賽組委會的指揮和安排,愛護競賽賽場地的設備。沒有其固定的門檻可以直接進行管網的報名。
Ⅳ 做程序員必須要搞ACM ICPC嗎
顯然不是必須的。在大學階段成為人生贏家的道路有很多,ACM在其中恐怕還算比較曲折的一條。然而程序員是否必須參加ACM這個問題,和題主是否有必要參加ACM似乎也毫無關聯。接下來談談實際問題:小馬過河,是該蛙泳還是狗刨。很多ACM相關的吐槽諸位都應該聽多了:大量重風格糟糕的編碼練習,在某些演算法細節的實現上過於別扭的糾結,各種在現實應用中並無卵用的神棍演算法大行其道。。。。。比如這篇演算法競賽總結里的吐槽(Overview of Programming Contests)(各種程序設計比賽總結得很完善,推薦各位看看)誠然,從成為一名優秀的技術人員的角度來說,在各種古典演算法的骨架上,玩上幾年披著程式設計外衣的思維游戲,想必不會是捷徑。然而,我對ACM的理解是,它真正牛逼的地方,不在於從中學了多少演算法,做了多少題。而是厲害在生態系統的完備上。這里的生態系統是指由以ICPC為首的諸多演算法競賽賽事,和校內集訓隊構成的整體環境。首先,私以為,對個人成長來說,反饋才是核心。而演算法競賽的一大特點恰恰是高反饋。從每個提交返回的AC,WA,TLE,到topcoder,codeforces等大型線上賽網站的elo rating系統,各種各樣商業公司組織的演算法比賽,以及ICPC賽事本身積淀至今的儀式感構成了ICPC完整的反饋體系。高反饋給予了演算法競賽選手高動力。君不見,諸多競賽選手一年裡的很多個晚上為了能夠做場線上賽,冒著被室友殺身之險,在斷了電的宿舍里,摸黑戰斗到凌晨兩三點(主要是時差問題), 並且還能樂在其中。像輪子哥一般自少年時期便執著於代碼的傑出技術青年著實不多,然而能在炎炎夏日連續兩個月,每天堅持訓練十個小時以上,整個演算法競賽生涯傾注數千小時於coding之上的ACMer卻比比皆是。
Ⅵ 如何用一串代碼成為kpl職業選手
一串代碼成為職業選手是不可能的。
如果想獲得王者榮耀最佳戰績,可以考慮用人工智慧演算法來訓練你的機器人,幫你打比賽。
但是要成為職業選手,那是你自己個人的事,需要你苦練技術,而且需要你的大腦和手速都跟得上,這個就不是用代碼能解決的問題了。
成為KPl職業選手的方法:
首先你要在游戲當中打上百星榮耀王者,巔峰賽2000分,你才有可能獲得青訓試訓的資格,然後進入青訓營。
你必須要在一群國服大佬當中出類拔萃,要開瑞全場光芒四射,你才有可能被俱樂部買走。
接著,你在二隊打訓練賽,如果你表現突出才能成為一隊的替補,再到一隊,有人退役或者狀態不行的時候,你才有機會在不太重要的比賽臨時上場一次。
如果這次登場表現得好,那麼你就繼續留下來打比賽,表現不好,你很有可能被永久雪藏。
年齡要求:
一般中國電競打職業的話是年滿16周歲,同時電競職業選手,最好是18-24歲之間,這個年齡段時期人的反應較其他時期迅速,電競職業選手大多在25歲左右會退役。
Ⅶ 如何參加ACM/ICPC
ACM/ICPC採用組隊參賽的形式,由三名隊員組成一支隊伍參賽。比賽時三名隊員只使用一台電腦,整個比賽時間為5個小時。 比賽題目為6~10道不等,全英文。 比賽是只能攜帶紙質材料。 標準的程序數據輸入和輸出解答要求。選手們必須根據題目內容設計演算法,並完成相應的功能要求。該隊程序如果能在規定時間內得出正確的答案視為通過。 隊伍通過的題目數量多的在比賽中排名越高,題目數相同的則用時越少的排名越高。 該項競賽分區域預賽和國際決賽兩個階段進行。各預賽區前幾名自動獲得參加世界決賽的資格,世界決賽安排在每年的3~4月舉行,而區域預賽安排在上一年的9~12月在各大洲舉行。 你要先進學校校隊才有可能參加
Ⅷ 學珠心算的方法
請參考:一、確定科學的教學與訓練途徑
教學與訓練的途徑決定著教學與訓練的基本模式。在教學與訓練中只有客觀地遵循教學原則,根據教學對象、培養目標及珠心算本身的特點,確定科學、高效的教學與訓練途徑,才能實現珠心算教學與訓練質量的最優化。珠心算教學與訓練途徑主要有兩條:一是課外興趣小組提高型;二是課堂教學班普及型。後者又可分為課外與課內兩種。以興趣小組形式進行的提高型,由於參加的兒童一般從一個或幾個年齡相當的班中挑選出來的各方面素質較好的兒童,所以教師要採取熟練珠算,逐步過渡到珠心算的思路進行教學。從加強珠算的基本功(即記數、撥珠、寫數等)和珠算加減法訓練著手,待加減算能算10筆兩、三位數時,再引入珠心算。這樣基本功扎實,進度快,有利於培養心算尖子,參與競技。
對於全班進行的普及型,特別是進入數學課堂教學的,最好走珠算與珠心算基本同步的路子,即從認識數開始逐步滲透珠心算的思想。
二、安排適當的教學與訓練時間
珠心算的教學要求教師精講,兒童多練,才能實現珠算向珠心算的轉化。多練也並不是無限制花大量的時間練,必須有一個「度」。 每次訓練時間長了大腦容易疲勞。許多教育家和心理學家指出,任何一種過於長久和單調的活動,對兒童都是極其有害的。兒童正是長身體、長知識的時期,如果教師一味地追求對兒童珠心算的訓練,而忽視了對他們其它方面的能力培養和應有知識的掌握,那麼這樣的教學是不成功的。同時,在教學中教師也應考慮到兒童的注意不穩定性及人的記憶與遺忘的規律性等因素。因此,在珠心算的教學與訓練中,除了每次課間要安排些休息,最好讓兒童到室外做些全身運動,以保持大腦清醒,調節精神和視力外,建議珠心算的普及型教學每周最好分散活動2—3次,每次30—40分鍾;提高型每周最好安排課余活動5—6次,每次1至1個半小時,這樣既能提高訓練效率,又能使學習珠心算的兒童有時間參加一些其他活動,使他們德、智、體全面發展。
三、選擇合適的計算方法
計算方法是提高珠心算教學與訓練質量的一個重要因素。我們知道每個兒童在接受、理解、記憶等能力方面存在著差異,如果只考慮演算法的先進性,而忽視了兒童的接受能力等,那麼勢必影響教學與訓練的效果。反之亦然。同時珠心算教學要求與目標不同,所以在計算方法的選擇上有所區別。
四、有效地指導教學與訓練
如何用最少的時間,花最小的精力創造最佳的教學與訓練效果,是教學工作者所期待的。在教學訓練中除了採取些趣味練習,講故事、開火車、比一比等形式,激發兒童學珠心算興趣,調動兒童積極性外,還需要根據培養目標和珠心算學科的特點,把握珠心算教學的方向,才能取得事半功倍的教學與訓練效果。
1.要處理好「准」與「快」的關系
准與快的關系是數量與質量的關系。培養一般的珠心算兒童(普及型),則強調准,准中求快,即先有質量後有數量;培養珠心算選手(提高型),則要求快,快中求准。
2.要重視聽的訓練
聽是珠心算和珠算教學與訓練中的一種形式,也是教學中不可缺少的一個環節。從珠心算教學效果看,無論是珠算還是珠心算,聽是看的基礎,一般先聽後看,再聽、看交替較為理想。
3.加強珠算操作
從珠心算的形成過程中可以看出,珠心算來源於珠算,是珠算的最高形式。如果教練忽視了珠算的訓練,那麼珠心算將成為「無源之水,無本之木」,珠心算的水平就無法再提高。
Ⅸ 我要達到怎樣的水平才能去參加acm編程比賽
演算法,數據結構是關鍵,另外還有組合數學,特別是集合與圖論,概率論也重要。推薦買一本《演算法導論》,那本書行,看起來超爽!!!基本掌握語法還不行啊,語法的超熟練掌握,不然出了錯誤很難調試的!!!最重要的是超牛皮的頭腦啦,分析能力,邏輯推理能力很重要。ACM很好玩啦,祝你成功!!!
acm是3人一組的,以學校為單位報名的,也就是說要得到學校同意,還要有2個一起搞的。其實可能是你不知道你們學校搞acm的地方,建議你好好詢問下你們學校管科技創新方面的人。建議你找幾個興趣相同的一起做,互相探討效果好多了,團隊合作也是acm要求的3大能力之一。
數據結構遠遠不夠的,建議你看演算法導論,黑書,oj的話個人覺得還是poj好,有水題有好題,而且做的人多,要解題報告什麼的也好找。我們就是一些做acm的學生一起搞,也沒老師,這樣肯定能行的。
基礎的話是語言,然後數據結構,然後演算法。
ACM有三個方向:演算法,數學,實現
要求三種能力:英文,自學,團隊協作
簡單的說,你要能讀懂英文的題意描述,要有一門acm能使用的編程語言,要會數據結構,有一點數學基礎,一點編程方面天賦,要有興趣和毅力(最重要),就具有做ACM的基本條件了。
做acm我推薦c,c++也可以,java在某些情況下好用,但是大多數情況的效率和代碼量都不大好,所以建議主用c++,有些題目用java
還有什麼問題,可以問我啊。
不好意思,沒見過用java描述的acm書籍,大多數是用偽命令,其他有的用的c,c++,老一些的用pascal。java只是用來做高精度的一些題的,個人覺得不用專門看這方面的書,java的基本部分學好就夠用了。所以我還是推薦主用c++,在高精度和個別題再用java。你可以找找java描述的演算法設計與分析,這個好像有
數據結構:C語言版 清華大學出版社 嚴蔚敏 《數據結構》
演算法:清華大學出版社 王曉東 《演算法設計與分析》
麻省理工大學 中譯本:機械工業出版社 《演算法導論》
基本上這三本書就已經足夠了,建議一般水平的人先不要看演算法導論,待另外兩本書看的差不多的時候,再看演算法導論加深理解。
另外還有很多針對性更強的書籍,不過針對性太強,這里就不多介紹了。
以上一些都是些演算法方面的書,最好的方式就是做題與看書相結合,很多在線做題的網站,PKU,ZOJ很多,推薦PKU,題目比較多,參與的人比較多。做一段時間的題,然後看書,研究演算法,再做題,這樣進步比較快。
還有關於ACM競賽,我有自己的一點話說。
首先說下ACM/ICPC是個團隊項目,最後的參賽名額是按照學校為單位的,所以找到志同道合的隊友和學校的支持是很重要的。
剛剛接觸信息學領域的同學往往存在很多困惑,不知道從何入手學習,在這篇文章里,我希望能將自己不多的經驗與大家分享,希望對各位有所幫助。
一、語言是最重要的基本功
無論側重於什麼方面,只要是通過計算機程序去最終實現的競賽,語言都是大家要過的第一道關。亞洲賽區的比賽支持的語言包括C/C++與JAVA。筆者首先說說JAVA,眾所周知,作為面向對象的王牌語言,JAVA在大型工程的組織與安全性方面有著自己獨特的優勢,但是對於信息學比賽的具體場合,JAVA則顯得不那麼合適,它對於輸入輸出流的操作相比於C++要繁雜很多,更為重要的是JAVA程序的運行速度要比C++慢10倍以上,而競賽中對於JAVA程序的運行時限卻往往得不到同等比例的放寬,這無疑對演算法設計提出了更高的要求,是相當不利的。其實,筆者並不主張大家在這種場合過多地運用面向對象的程序設計思維,因為對於小程序來說這不旦需要花費更多的時間去編寫代碼,也會降低程序的執行效率。
接著說C和C++。許多現在參加講座的同學還在上大一,C的基礎知識剛剛學完,還沒有接觸過C++,其實在賽場上使用純C的選手還是大有人在的,它們主要是看重了純C在效率上的優勢,所以這部分同學如果時間有限,並不需要急著去學習新的語言,只要提高了自己在演算法設計上的造詣,純C一樣能發揮巨大的威力。
而C++相對於C,在輸入輸出流上的封裝大大方便了我們的操作,同時降低了出錯的可能性,並且能夠很好地實現標准流與文件流的切換,方便了調試的工作。如果有些同學比較在意這點,可以嘗試C和C++的混編,畢竟僅僅學習C++的流操作還是不花什麼時間的。
C++的另一個支持來源於標准模版庫(STL),庫中提供的對於基本數據結構的統一介面操作和基本演算法的實現可以縮減我們編寫代碼的長度,這可以節省一些時間。但是,與此相對的,使用STL要在效率上做出一些犧牲,對於輸入規模很大的題目,有時候必須放棄STL,這意味著我們不能存在「有了STL就可以不去管基本演算法的實現」的想法;另外,熟練和恰當地使用STL必須經過一定時間的積累,准確地了解各種操作的時間復雜度,切忌對STL中不熟悉的部分濫用,因為這其中蘊涵著許多初學者不易發現的陷阱。
通過以上的分析,我們可以看出僅就信息學競賽而言,對語言的掌握並不要求十分全面,但是對於經常用到的部分,必須十分熟練,不允許有半點不清楚的地方,下面我舉個真實的例子來說明這個道理——即使是一點很細微的語言障礙,都有可能釀成錯誤:
在去年清華的賽區上,有一個隊在做F題的時候使用了cout和printf的混合輸出,由於一個帶緩沖一個不帶,所以輸出一長就混亂了。只是因為當時judge team中負責F題的人眼睛尖,看出答案沒錯只是順序不對(答案有一頁多,是所有題目中最長的一個輸出),又看了看程序發現只是輸出問題就給了個Presentation error(格式錯)。如果審題的人不是這樣而是直接給一個 Wrong Answer,相信這個隊是很難查到自己錯在什麼地方的。
現在我們轉入第二個方面的討論,基礎學科知識的積累。
二、以數學為主的基礎知識十分重要
雖然被定性為程序設計競賽,但是參賽選手所遇到的問題更多的是沒有解決問題的思路,而不是有了思路卻死活不能實現,這就是平時積累的基礎知識不夠。今年World Final的總冠軍是波蘭華沙大學,其成員出自於數學系而非計算機系,這就是一個鮮活的例子。競賽中對於基礎學科的涉及主要集中於數學,此外對於物理、電路等等也可能有一定應用,但是不多。因此,大一的同學也不必為自己還沒學數據結構而感到不知從何入手提高,把數學撿起來吧!下面我來談談在競賽中應用的數學的主要分支。
1、離散數學——作為計算機學科的基礎,離散數學是競賽中涉及最多的數學分支,其重中之重又在於圖論和組合數學,尤其是圖論。
圖論之所以運用最多是因為它的變化最多,而且可以輕易地結合基本數據結構和許多演算法的基本思想,較多用到的知識包括連通性判斷、DFS和BFS,關節點和關鍵路徑、歐拉迴路、最小生成樹、最短路徑、二部圖匹配和網路流等等。雖然這部分的比重很大,但是往往也是競賽中的難題所在,如果有初學者對於這部分的某些具體內容暫時感到力不從心,也不必著急,可以慢慢積累。
競賽中設計的組合計數問題大都需要用組合數學來解決,組合數學中的知識相比於圖論要簡單一些,很多知識對於小學上過奧校的同學來說已經十分熟悉,但是也有一些部分需要先對代數結構中的群論有初步了解才能進行學習。組合數學在競賽中很少以難題的形式出現,但是如果積累不夠,任何一道這方面的題目卻都有可能成為難題。
2、數論——以素數判斷和同餘為模型構造出來的題目往往需要較多的數論知識來解決,這部分在競賽中的比重並不大,但只要來上一道,也足以使知識不足的人冥思苦想上一陣時間。素數判斷和同餘最常見的是在以密碼學為背景的題目中出現,在運用密碼學常識確定大概的過程之後,核心演算法往往要涉及數論的內容。
3、計算幾何——計算幾何相比於其它部分來說是比較獨立的,就是說它和其它的知識點很少有過多的結合,較常用到的部分包括——線段相交的判斷、多邊形面積的計算、內點外點的判斷、凸包等等。計算幾何的題目難度不會很大,但也永遠不會成為最弱的題。
4、線性代數——對線性代數的應用都是圍繞矩陣展開的,一些表面上是模擬的題目往往可以藉助於矩陣來找到更好的演算法。
5、概率論——競賽是以黑箱來判卷的,這就是說你幾乎不能動使用概率演算法的念頭,但這也並不是說概率就沒有用。關於這一點,只有通過一定的練習才能體會。
6、初等數學與解析幾何——這主要就是中學的知識了,用的不多,但是至少比高等數學多,我覺得熟悉一下數學手冊上的相關內容,至少要知道在哪兒能查到,還是必要的。
7、高等數學——純粹運用高等數學來解決的題目我接觸的只有一道,但是一些題目的敘述背景往往需要和這部分有一定聯系,掌握得牢固一些總歸沒有壞處。
以上就是競賽所涉及的數學領域,可以說范圍是相當廣的。我認識的許多人去搞信息學的競賽就是為了逼著自己多學一點數學,因為數學是一切一切的基礎。
三、數據結構與演算法是真正的核心
雖然數學十分十分重要,但是如果讓三個只會數學的人參加比賽,我相信多數情況下會比三個只會數據結構與演算法的人得到更為悲慘的結局。
先說說數據結構。掌握隊列、堆棧和圖的基本表達與操作是必需的,至於樹,我個人覺得需要建樹的問題有但是並不多。(但是樹往往是很重要的分析工具)除此之外,排序和查找並不需要對所有方式都能很熟練的掌握,但你必須保證自己對於各種情況都有一個在時間復雜度上滿足最低要求的解決方案。說到時間復雜度,就又該說說哈希表了,競賽時對時間的限制遠遠多於對空間的限制,這要求大家盡快掌握「以空間換時間」的原則策略,能用哈希表來存儲的數據一定不要到時候再去查找,如果實在不能建哈希表,再看看能否建二叉查找樹等等——這都是爭取時間的策略,掌握這些技巧需要大家對數據結構尤其是演算法復雜度有比較全面的理性和感性認識。
接著說說演算法。演算法中最基本和常用的是搜索,主要是回溯和分支限界法的使用。這里要說的是,有些初學者在學習這些搜索基本演算法是不太注意剪枝,這是十分不可取的,因為所有搜索的題目給你的測試用例都不會有很大的規模,你往往察覺不出程序運行的時間問題,但是真正的測試數據一定能過濾出那些沒有剪枝的演算法。實際上參賽選手基本上都會使用常用的搜索演算法,題目的區分度往往就是建立在諸如剪枝之類的優化上了。
常用演算法中的另一類是以「相似或相同子問題」為核心的,包括遞推、遞歸、貪心法和動態規劃。這其中比較難於掌握的就是動態規劃,如何抽象出重復的子問題是很多題目的難點所在,筆者建議初學者仔細理解圖論中一些以動態規劃為基本思想所建立起來的基本演算法(比如Floyd-Warshall演算法),並且多閱讀一些定理的證明,這雖然不能有什麼直接的幫助,但是長期堅持就會對思維很有幫助。
四、團隊配合
通過以上的介紹大家也可以看出,信息學競賽對於知識面覆蓋的非常廣,想憑一己之力全部消化這些東西實在是相當困難的,這就要求我們盡可能地發揮團隊協作的精神。同組成員之間的熟練配合和默契的形成需要時間,具體的情況因成員的組成不同而不同,這里我就不再多說了。
五、練習、練習、再練習
知識的積累固然重要,但是信息學終究不是看出來的,而是練出來的,這是多少前人最深的一點體會,只有通過具體題目的分析和實踐,才能真正掌握數學的使用和演算法的應用,並在不斷的練習中增加編程經驗和技巧,提高對時間復雜度的感性認識,優化時間的分配,加強團隊的配合。總之,在這里光有紙上談兵是絕對不行的,必須要通過實戰來鍛煉自己。
大家一定要問,我們去哪裡找題做,又如何檢驗程序是否正確呢?這大可不必擔心,現在已經有了很多網上做題的站點,這些站點提供了大量的題庫並支持在線判卷,你只需要把程序源碼提交上去,馬上就可以知道自己的程序是否正確,運行所使用的時間以及消耗的內存等等狀況。下面我給大家推薦幾個站點,筆者不建議大家在所有這些站點上做題,選擇一個就可以了,因為每個站點的題都有一定的難易比例,系統地做一套題庫可以使你對各種難度、各種類型的題都有所認識。
1、Ural:
Ural是中國學生對俄羅斯的Ural州立大學的簡稱 ,那裡設立了一個Ural Online Problem Set,並且支持Online Judge。Ural的不少題目演算法性和趣聞性都很強,得到了國內廣大學生的厚愛。根據「信息學初學者之家」網站的統計,Ural的題目類型大概呈如下的分布:
題型
搜索
動態規劃
貪心
構造
圖論
計算幾何
純數學問題
數據結構
其它
所佔比例
約10%
約15%
約5%
約5%
約10%
約5%
約20%
約5%
約25%
這和實際比賽中的題型分布也是大體相當的。有興趣的朋友可以去看看。
2、UVA:
UVA代表西班牙Valladolid大學(University de Valladolid)。該大學有一個那裡設立了一個PROBLEM SET ARCHIVE with ONLINE JUDGE ,並且支持ONLINE JUDGE,形式和Ural大學的題庫類似。不過和Ural不同的是,UVA題目多的多,而且比較雜,而且有些題目的測試數據比較刁鑽。這使得剛到那裡做題的朋友往往感覺到無所適從,要麼難以找到合適的題目,要麼Wrong Answer了很多次以後仍然不知道錯在那裡。 如果說做Ural題目主要是為了訓練演算法,那麼UVA題目可以訓練全方位的基本功和一些必要的編程素質。UVA和許多世界知名大學聯合辦有同步網上比賽,因此那裡強人無數,不過你先要使自己具有聽懂他們在說什麼的素質:)
3、ZOJ:
ZOJ是浙江大學建立的ONLINE JUDGE,是中國大學建立的第一個同類站點,也是最好和人氣最高的一個,筆者和許多班裡的同學就是在這里練習。ZOJ雖然也定位為一個英文網站,但是這里的中國學生比較多,因此讓人覺得很親切。這里目前有500多道題目,難易分配適中,且涵蓋了各大洲的題目類型並配有索引,除此之外,ZOJ的JUDGE系統是幾個網站中表現得比較好的一個,很少出現Wrong Answer和Presentation error混淆的情況。這里每月也辦有一次網上比賽,只要是注冊的用戶都可以參加。
說起中國的ONLINE JUDGE,去年才開始參加ACM競賽的北京大學現在也建立了自己的提交系統;而我們學校也是去年開始參加比賽,現在也有可能推出自己的提交系統,如果能夠做成,到時候大家就可以去上面做題了。同類網站的飛速發展標志著有越來越多的同學有興趣進入信息學的領域探索,這是一件好事,同時也意味著更激烈的競爭。
Ⅹ 《演算法競賽入門經典訓練指南》pdf下載在線閱讀全文,求百度網盤雲資源
《演算法競賽入門經典 訓練指南 升級版》(劉汝佳)電子書網盤下載免費在線閱讀
鏈接: https://pan..com/s/11qzCfpPngSnomOF1Rl5XKA
書名:演算法競賽入門經典 訓練指南 升級版
作者:劉汝佳
出版社:清華大學出版社
出版年份:2021-5-1
內容簡介:
《演算法競賽入門經典——訓練指南(升級版)》是《演算法競賽入門經典(第2版)》一書的重要補充,旨在補充原書中沒有涉及或者講解得不夠詳細的內容,從而構建一個更完整的知識體系。本書通過大量有針對性的題目,讓抽象復雜的演算法和數學具體化、實用化。
《演算法競賽入門經典——訓練指南(升級版)》共包括6章,分別為演算法設計基礎、數學基礎、實用數據結構、幾何問題、圖論演算法與模型以及更多演算法專題。全書通過206道例題深入淺出地介紹了上述領域的各個知識點、經典思維方式以及程序實現的常見方法和技巧,並在章末給出了豐富的分類習題,供讀者查漏補缺和強化學習效果。
《演算法競賽入門經典——訓練指南(升級版)》題目多選自近年來ACM/ICPC區域賽和總決賽真題,內容全面,信息量大,覆蓋了常見演算法競賽中的大多數細分知識點。書中還給出了所有重要的經典演算法的完整程序,以及重要例題的核心代碼,既適合選手自學,也方便院校和培訓機構組織學生學習和訓練。
作者簡介:
劉汝佳,2000年3月獲得NOI2000全國青少年信息學奧林匹克競賽一等獎。大一時獲2001年ACM/ICPC國際大學生程序設計競賽亞洲-上海賽區冠軍和2002年世界總決賽銀牌。2004年至今共為 ACM/ICPC亞洲賽區命題二十餘道,擔任6次裁判和2次命題總監,並應邀參加IOI和ACM/ICPC相關國際研討會。曾出版《演算法競賽入門經典》《演算法競賽入門經典——訓練指南》《編程挑戰》等暢銷書。
陳鋒,任職於廈門宇道信隆信息科技有限公司,擔任技術總監職務,專注於人工智慧以及演算法技術在金融科技領域的應用。同時擔任四川大學ACM/ICPC演算法競賽集訓隊特邀指導老師,榕陽編程NOI、NOIP指導教練。所帶學員多次獲得ICPC金/銀牌,進入NOI省隊等。曾出版《演算法競賽入門經典——訓練指南》《演算法競賽入門經典——習題與解答》《演算法競賽入門經典——演算法實現》等暢銷書。