一直覺得ACM是個神奇的東西,ACM陪伴我度過了許多枯燥寂寞的時光,雖然在很多人看來這個也許是枯燥和無聊的。但是和其他ACMer一樣,我深深被它的魅力所吸引,雖然第一次比較正式的Regional的比賽也以悲劇告終,但我覺得不后悔。下面就簡單的講一下我的ACM經(jīng)歷吧。
我接觸ACM的時間比較晚(我一直覺得這是我悲劇的根源),大一下的時候?qū)W了C程序設(shè)計,覺得編程還挺有意思的,除了完成老師布置的作業(yè)以外,我還自己用C語言編程實現(xiàn)課后的一些習題,學會了C語言的一些基本的東西。第一次聽說ACM是在大二下的時候,ACM亞洲區(qū)主席黃金雄來我校開講座,講座中講了很多關(guān)于ACM的事情,講座后我去找了羅老師,羅老師給我介紹了學校ACM-ICPC競賽隊的一些基本情況,介紹了一下怎么在oj上做題,怎么起步,然后我就開始做題了, 開始就做一些水題(也就是簡單題)。
在暑假集訓之前大概作了70+的題目,中間還暈乎乎參加的一次校賽,雖然十分的悲劇,但是讓我對算法有了初步的認識,讓我知道了算法可以提高效率,否則就會超時。
后來就迎來了暑假的集訓,每天都重復(fù)機房——食堂——寢室的生活,開始的幾天還是整天在pku上刷水題,后來就是個人賽 ,由于個人賽的題目很多都是以前的regional的題目,當時我對算法的了解幾乎為零,做起來也比較吃力,成績也不太理想,不過那個時期是我開始全面接觸ACM算法的時期,后來就是組隊賽,我當時和FHX和ZYY組了女隊,個人感覺組隊賽比個人賽壓力小很多,因為有三個人一起做題,但是女隊比較弱,幾場網(wǎng)絡(luò)賽下來,我們經(jīng)常墊底,但那個時候是我學習全面了解ACM,學習了很多算法和數(shù)據(jù)結(jié)構(gòu)的知識,順便透露一下我那段時間每天的行程:早上機房----中午食堂-------下午機房------傍晚食堂------晚上機房------回寢室看動畫片(那段時間很迷柯南)-----然后聊天-------然后再看一會題----然后睡覺 ----在旁人看來這樣的生活確實是枯燥無味的,但是我覺得樂在其中,現(xiàn)在想起來還是挺懷念的。組隊賽后就迎來的了我大三的軍訓,暑假集訓算是結(jié)束了。
后來就是網(wǎng)絡(luò)賽了。哈爾濱,合肥,寧波,上海,武漢,總共做了五場的網(wǎng)絡(luò)賽。這段時間還是繼續(xù)再pku上做題,總的來說還是有進步的。后來羅老師終于為我們爭取到了上海賽區(qū)的比賽資格。上海Regional的比賽最終以悲劇告終,其實這是很正常的事情,學長們都說第一次比賽就是去受打擊了,但對于我這個大三的來說,這可能是我唯一的一次Regional了,沒有拿獎?wù)娴谋容^可惜,這次比賽也充分讓我認識到差距的存在,很自己在ACM的學習之中的很多不足之處。可以在未來的學習中有所側(cè)重。下面我再介紹下關(guān)于ACM的學習吧。
(1) 起步階段。
開始的時候就是對C語言的基本知識的學習,學過C語言的同學就可以開始做題了,最好不要一開始就接觸算法,可以到一些學校的oj上找些簡單的題目做,對于初學者,poj是個不錯的選擇,很多題目在網(wǎng)上找到解題報告和源代碼.很多題目也比較簡單.下面簡單介紹一下:
**關(guān)于poj:
網(wǎng)址: http://acm.pku.edu.cn/JudgeOnline/
一般都是在oj上看完題目后在本機的編譯器上進行程序的程序的編寫和調(diào)試,直到運行結(jié)果正確了再在oj上提交,提交后會返回一下幾種結(jié)果:
Accept--------------------------表明你的程序結(jié)果是OK的;
Wrong Answer----------------表明你的程序有問題, 對oj上給出的測試數(shù)據(jù)運行結(jié)果不正確;
Time Limit Exceeded----------------表明你的程序有可能是正確的,但是運行效率不高導(dǎo)致超時;
Rutime Error---------------運行時錯誤,一般是數(shù)組越界,除零,或者訪問了不該訪問的內(nèi)存導(dǎo)致的,可能的原因可能是數(shù)組開的太小等原因;
Presentation
Error----------------如果返回的是這個的話,那么你離Accept已經(jīng)很近了近了。一般出現(xiàn)這個的原因是運行的結(jié)果是正確的,只是結(jié)果的格式不正確,一般是多打過著少打了空格或者換行之類的,這時只要重新看一下題目,弄清輸出要求就行了;
Memory Limit Exceeded--------------超內(nèi)存,一般是數(shù)組開太大導(dǎo)致;
Compire Error----------------編譯錯誤,這種錯誤一般是不該出現(xiàn)的,一般沒有人會在本機上編譯都通不過的情況下就提交
,不過有時要看清oj的要求,比如用int64還是lld。
**關(guān)于做簡單題
我剛開始的時候是在梅隴客棧的程序板塊上找到了一個我們學校內(nèi)部的簡單題的分類。不過也可以通過其他途徑,比如可以到google上搜pku 簡單題,或者是跟著別人做題,一般大家學習ACM得時候都是從簡單題開始做的,可以打開某個學長的賬號然后順著他的題號往下切。
剛開始做題的時候如果看到某個題目一點想法都沒有,不要急于求成,也不要急著找學長要代碼看,或者讓學長提示。可以先看其它的題然后過一段時間再來看,或者當你的程序提交上去wa個不停,經(jīng)過兩三天的思考仍然沒有思路的時候可以看一下oj上面的discuss,一般里面會有人貼出解題思路甚至是代碼,會提醒你這到題目有什么陷阱(但是堅決不倡議做題的時候不經(jīng)過自己思考就直接看discuss的行為)。
還有就是建議初學者在C語言的基礎(chǔ)上學一下C++,建議看一下C++
primer這本書,C++里面有很多容器,比如說Vector,queue
Map之類,還有快速排序sort函數(shù),二分查找函數(shù)bsearch以及求字典序全排列next_permutation,等,用起來真的很爽(雖然現(xiàn)在還用的不是很熟)。
萬事開頭難,除了高中搞過IO競賽的,對于大多數(shù)人來說都是第一次接觸ACM,剛開始做簡單題的時候我也感覺并不容易,比如題目都是英文的看起來比較費勁,要看很久才能搞清楚題目意思,有時候簡單題目交上去卻WA個不停,題目有很多trick,覺得很郁悶,但是不要灰心,個人覺得ACM貴在堅持,只要堅持下來,就會越來越體會到ACM 的無窮樂趣了。
(2) 關(guān)于各種算法的學習。
下面是我在網(wǎng)上找到一個算法的分類,感覺還是挺全的。
初期:
一.基本算法:
(1)枚舉. (poj1753,poj2965)
(2)貪心(poj1328,poj2109,poj2586)
(3)遞歸和分治法.
(4)遞推.
(5)構(gòu)造法.(poj3295)
(6)模擬法.(poj1068,poj2632,poj1573,poj2993,poj2996)
二.圖算法:
(1)圖的深度優(yōu)先遍歷和廣度優(yōu)先遍歷.
(2)最短路徑算法(dijkstra,bellman-ford,floyd,heap+dijkstra)
(poj1860,poj3259,poj1062,poj2253,poj1125,poj2240)
(3)最小生成樹算法(prim,kruskal)
(poj1789,poj2485,poj1258,poj3026)
(4)拓撲排序 (poj1094)
(5)二分圖的最大匹配 (匈牙利算法)
(poj3041,poj3020)
(6)最大流的增廣路算法(KM算法).
(poj1459,poj3436)
三.數(shù)據(jù)結(jié)構(gòu).
(1)串 (poj1035,poj3080,poj1936)
(2)排序(快排、歸并排(與逆序數(shù)有關(guān))、堆排) (poj2388,poj2299)
(3)簡單并查集的應(yīng)用.
(4)哈希表和二分查找等高效查找法(數(shù)的Hash,串的Hash)
(poj3349,poj3274,POJ2151,poj1840,poj2002,poj2503)
(5)哈夫曼樹(poj3253)
(6)堆
(7)trie樹(靜態(tài)建樹、動態(tài)建樹) (poj2513)
四.簡單搜索
(1)深度優(yōu)先搜索 (poj2488,poj3083,poj3009,poj1321,poj2251)
(2)廣度優(yōu)先搜索(poj3278,poj1426,poj3126,poj3087.poj3414)
(3)簡單搜索技巧和剪枝(poj2531,poj1416,poj2676,1129)
五.動態(tài)規(guī)劃
(1)背包問題. (poj1837,poj1276)
(2)型如下表的簡單DP(可參考lrj的書 page149):
1.E[j]=opt{D+w(i,j)} (poj3267,poj1836,poj1260,poj2533)
2.E[i,j]=opt{D[i-1,j]+xi,D[i,j-1]+yj,D[i-1][j-1]+zij} (最長公共子序列)
(poj3176,poj1080,poj1159)
3.C[i,j]=w[i,j]+opt{C[i,k-1]+C[k,j]}.(最優(yōu)二分檢索樹問題)
六.數(shù)學
(1)組合數(shù)學:
1.加法原理和乘法原理.
2.排列組合.
3.遞推關(guān)系.
(POJ3252,poj1850,poj1019,poj1942)
(2)數(shù)論.
1.素數(shù)與整除問題
2.進制位.
3.同余模運算.
(poj2635, poj3292,poj1845,poj2115)
(3)計算方法.
1.二分法求解單調(diào)函數(shù)相關(guān)知識.(poj3273,poj3258,poj1905,poj3122)
七.計算幾何學.
(1)幾何公式.
(2)叉積和點積的運用(如線段相交的判定,點到線段的距離等). (poj2031,poj1039)
(3)多邊型的簡單算法(求面積)和相關(guān)判定(點在多邊型內(nèi),多邊型是否相交)
(poj1408,poj1584)
(4)凸包. (poj2187,poj1113)
中級:
一.基本算法:
(1)C++的標準模版庫的應(yīng)用. (poj3096,poj3007)
(2)較為復(fù)雜的模擬題的訓練(poj3393,poj1472,poj3371,poj1027,poj2706)
二.圖算法:
(1)差分約束系統(tǒng)的建立和求解. (poj1201,poj2983)
(2)最小費用最大流(poj2516,poj2516,poj2195)
(3)雙連通分量(poj2942)
(4)強連通分支及其縮點.(poj2186)
(5)圖的割邊和割點(poj3352)
(6)最小割模型、網(wǎng)絡(luò)流規(guī)約(poj3308, )
三.數(shù)據(jù)結(jié)構(gòu).
(1)線段樹. (poj2528,poj2828,poj2777,poj2886,poj2750)
(2)靜態(tài)二叉檢索樹. (poj2482,poj2352)
(3)樹狀樹組(poj1195,poj3321)
(4)RMQ. (poj3264,poj3368)
(5)并查集的高級應(yīng)用. (poj1703,2492)
(6)KMP算法. (poj1961,poj2406)
四.搜索
(1)最優(yōu)化剪枝和可行性剪枝
(2)搜索的技巧和優(yōu)化 (poj3411,poj1724)
(3)記憶化搜索(poj3373,poj1691)
五.動態(tài)規(guī)劃
(1)較為復(fù)雜的動態(tài)規(guī)劃(如動態(tài)規(guī)劃解特別的施行商問題等)
(poj1191,poj1054,poj3280,poj2029,poj2948,poj1925,poj3034)
(2)記錄狀態(tài)的動態(tài)規(guī)劃. (POJ3254,poj2411,poj1185)
(3)樹型動態(tài)規(guī)劃(poj2057,poj1947,poj2486,poj3140)
六.數(shù)學
(1)組合數(shù)學:
1.容斥原理.
2.抽屜原理.
3.置換群與Polya定理(poj1286,poj2409,poj3270,poj1026).
4.遞推關(guān)系和母函數(shù).
(2)數(shù)學.
1.高斯消元法(poj2947,poj1487, poj2065,poj1166,poj1222)
2.概率問題. (poj3071,poj3440)
3.GCD、擴展的歐幾里德(中國剩余定理) (poj3101)
(3)計算方法.
1.0/1分數(shù)規(guī)劃. (poj2976)
2.三分法求解單峰(單谷)的極值.
3.矩陣法(poj3150,poj3422,poj3070)
4.迭代逼近(poj3301)
(4)隨機化算法(poj3318,poj2454)
(5)雜題.
(poj1870,poj3296,poj3286,poj1095)
七.計算幾何學.
(1)坐標離散化.
(2)掃描線算法(例如求矩形的面積和周長并,常和線段樹或堆一起使用).
(poj1765,poj1177,poj1151,poj3277,poj2280,poj3004)
(3)多邊形的內(nèi)核(半平面交)(poj3130,poj3335)
(4)幾何工具的綜合應(yīng)用.(poj1819,poj1066,poj2043,poj3227,poj2165,poj3429)
高級:
一.基本算法要求:
(1)代碼快速寫成,精簡但不失風格
(poj2525,poj1684,poj1421,poj1048,poj2050,poj3306)
(2)保證正確性和高效性. poj3434
二.圖算法:
(1)度限制最小生成樹和第K最短路. (poj1639)
(2)最短路,最小生成樹,二分圖,最大流問題的相關(guān)理論(主要是模型建立和求解)
(poj3155, poj2112,poj1966,poj3281,poj1087,poj2289,poj3216,poj2446
(3)最優(yōu)比率生成樹. (poj2728)
(4)最小樹形圖(poj3164)
(5)次小生成樹.
(6)無向圖、有向圖的最小環(huán)
三.數(shù)據(jù)結(jié)構(gòu).
(1)trie圖的建立和應(yīng)用. (poj2778)
(2)LCA和RMQ問題(LCA(最近公共祖先問題) 有離線算法(并查集+dfs) 和
在線算法
(RMQ+dfs)).(poj1330)
(3)雙端隊列和它的應(yīng)用(維護一個單調(diào)的隊列,常常在動態(tài)規(guī)劃中起到優(yōu)化狀態(tài)轉(zhuǎn)移的
目的). (poj2823)
(4)左偏樹(可合并堆).
(5)后綴樹(非常有用的數(shù)據(jù)結(jié)構(gòu),也是賽區(qū)考題的熱點).
(poj3415,poj3294)
四.搜索
(1)較麻煩的搜索題目訓練(poj1069,poj3322,poj1475,poj1924,poj2049,poj3426)
(2)廣搜的狀態(tài)優(yōu)化:利用M進制數(shù)存儲狀態(tài)、轉(zhuǎn)化為串用hash表判重、按位壓縮存儲狀態(tài)、雙向廣搜、A*算法. (poj1768,poj1184,poj1872,poj1324,poj2046,poj1482)
(3)深搜的優(yōu)化:盡量用位運算、一定要加剪枝、函數(shù)參數(shù)盡可能少、層數(shù)不易過大、可以考慮雙向搜索或者是輪換搜索、IDA*算法. (poj3131,poj2870,poj2286)
五.動態(tài)規(guī)劃
(1)需要用數(shù)據(jù)結(jié)構(gòu)優(yōu)化的動態(tài)規(guī)劃.
(poj2754,poj3378,poj3017)
(2)四邊形不等式理論.
(3)較難的狀態(tài)DP(poj3133)
六.數(shù)學
(1)組合數(shù)學.
1.MoBius反演(poj2888,poj2154)
2.偏序關(guān)系理論.
(2)博奕論.
1.極大極小過程(poj3317,poj1085)
2.Nim問題.
七.計算幾何學.
(1)半平面求交(poj3384,poj2540)
(2)可視圖的建立(poj2966)
(3)點集最小圓覆蓋.
(4)對踵點(poj2079)
八.綜合題.
(poj3109,poj1478,poj1462,poj2729,poj2048,poj3336,poj3315,poj2148,poj1263)
以及補充
Dp狀態(tài)設(shè)計與方程總結(jié)
1.不完全狀態(tài)記錄
<1>青蛙過河問題
<2>利用區(qū)間dp
2.背包類問題
<1> 0-1背包,經(jīng)典問題
<2>無限背包,經(jīng)典問題
<3>判定性背包問題
<4>帶附屬關(guān)系的背包問題
<5> + -1背包問題
<6>雙背包求最優(yōu)值
<7>構(gòu)造三角形問題
<8>帶上下界限制的背包問題(012背包)
3.線性的動態(tài)規(guī)劃問題
<1>積木游戲問題
<2>決斗(判定性問題)
<3>圓的最大多邊形問題
<4>統(tǒng)計單詞個數(shù)問題
<5>棋盤分割
<6>日程安排問題
<7>最小逼近問題(求出兩數(shù)之比最接近某數(shù)/兩數(shù)之和等于某數(shù)等等)
<8>方塊消除游戲(某區(qū)間可以連續(xù)消去求最大效益)
<9>資源分配問題
<10>數(shù)字三角形問題
<11>漂亮的打印
<12>郵局問題與構(gòu)造答案
<13>最高積木問題
<14>兩段連續(xù)和最大
<15>2次冪和問題
<16>N個數(shù)的最大M段子段和
<17>交叉最大數(shù)問題
4.判定性問題的dp(如判定整除、判定可達性等)
<1>模K問題的dp
<2>特殊的模K問題,求最大(最小)模K的數(shù)
<3>變換數(shù)問題
5.單調(diào)性優(yōu)化的動態(tài)規(guī)劃
<1>1-SUM問題
<2>2-SUM問題
<3>序列劃分問題(單調(diào)隊列優(yōu)化)
6.剖分問題(多邊形剖分/石子合并/圓的剖分/乘積最大)
<1>凸多邊形的三角剖分問題
<2>乘積最大問題
<3>多邊形游戲(多邊形邊上是操作符,頂點有權(quán)值)
<4>石子合并(N^3/N^2/NLogN各種優(yōu)化)
7.貪心的動態(tài)規(guī)劃
<1>最優(yōu)裝載問題
<2>部分背包問題
<3>乘船問題
<4>貪心策略
<5>雙機調(diào)度問題Johnson算法
8.狀態(tài)dp
<1>牛仔射擊問題(博弈類)
<2>哈密頓路徑的狀態(tài)dp
<3>兩支點天平平衡問題
<4>一個有向圖的最接近二部圖
9.樹型dp
<1>完美服務(wù)器問題(每個節(jié)點有3種狀態(tài))
<2>小胖守皇宮問題
<3>網(wǎng)絡(luò)收費問題
<4>樹中漫游問題
<5>樹上的博弈
<6>樹的最大獨立集問題
<7>樹的最大平衡值問題
<8>構(gòu)造樹的最小環(huán)
關(guān)于算法的學習,可以看算法書籍,可以到圖書館借或者網(wǎng)上購買,也可以直接到網(wǎng)上搜索有關(guān)算法的知識
,個人認為有時候到網(wǎng)上搜的效果更好,因為網(wǎng)上經(jīng)常會提供某個算法的完整的源代碼,特別是對于初學者來說,算法書上往往只提供算法的偽代碼,往往比較費解。而且網(wǎng)上直接就有算法的分類和相應(yīng)的題目,;學習起來比較方便,下面大家推薦一些算法的書籍:
A原書名:The Art of Computer Programming
中文名:計算機程序設(shè)計藝術(shù)
作者:Donald E.Knuth
B原書名:Introduction to Algorithms
中文名:算法導(dǎo)論
作者:Thomas
H.Cormen,Charles E.Leiserson,Ronald L.Rivest,Clifford Stein
C原書名:The Design and Analysis of Computer Algorithms
中文名:算法設(shè)計與分析
作者:Aho,Hopcroft,Ullman
D原書名:Data Structures and Algorithms
中文名:數(shù)據(jù)結(jié)構(gòu)與算法
作者:Aho,Hopcroft,Ullman
E原書名:Algorithms in C,Algorithms in C++,Algorithms in Java
中文名:算法I-IV(C實現(xiàn)),算法V(C實現(xiàn))(C++實現(xiàn))(Java實現(xiàn))
作者:Robert Sedgewick
F原書名:Algorithms Design Techniques and Analysis
中文名:算法設(shè)計技巧與分析
作者:M.H.Alsuwaiyel
G
原書名:Introduction to
The Design & Analysis of Algorithms
中文名:算法設(shè)計與分析基礎(chǔ)
作者:Anany Levitin
H原書名:Data Structures, Algorithms, and Applications in C++
中文名:數(shù)據(jù)結(jié)構(gòu)算法與應(yīng)用-C++語言描述
作者:Sartej Sahni 譯者:汪詩林等
I原書名:
中文名:算法與數(shù)據(jù)結(jié)構(gòu)
作者:傅清祥 王曉東
J原書名:
中文名:數(shù)據(jù)結(jié)構(gòu)(C語言版)
作者:嚴蔚敏 吳偉民
**ACM=算法+數(shù)據(jù)結(jié)構(gòu)。
關(guān)于算法的學習,其實我也沒有什么特別好的經(jīng)驗可以分享的,就談一下我學習的過程吧。我大概是從暑假集訓的時候開始對算法的學習,在這之前都是在oj上做一些簡單題,以及高精度的題目,5月份的校內(nèi)競賽我才對算法有了初步的認識,記得那時做的兩三個題目都TLE了。現(xiàn)在還記得A題是求斐波那契數(shù)列,我們當時很傻逼的寫了個遞歸,TLE無數(shù)次,賽后才知道要用到矩陣的方法。
這是第一次深刻體會到算法的重要性,我先是在圖書館借了幾本算法書來看,后來在YQ學長的強烈推薦下買了《算法設(shè)計與分析》,王曉東的,這本書挺不錯的,很適合初學者。其他還買了算法導(dǎo)論,C++Primer等書,陸陸續(xù)續(xù)都看了一遍,開始的時候 做一些簡單的貪心,動態(tài)規(guī)劃的題目,比如貪心算法經(jīng)典的活動安排問題,最長上升子序列,最長公共子序列LCS等 。
后來漸漸被圖論吸引了,發(fā)現(xiàn)圖論是我搞的最多的東西了、目前為止圖論除了網(wǎng)絡(luò)流外,其他的東西我都多多少少搞過一些。還記得第一次接觸最短路的dijkstra算法,某次個人賽的時候求的是距離某個點第K近的路線,簡單的dijkstra就可以實現(xiàn),于是我就去看王曉東的算法設(shè)計與分析,看了很久才看懂,過了很久才把他A掉,感覺蠻興奮的;后來就開始喜歡上圖論了。開始研究最小生成樹prim,floyed,然后是并茶集,kruskal,二分匹配,然后就是拓撲排序。后來對算法理解到一定程度的時候就要開始注意對算法的深入理解和學習,比如說求最短路dijstra算法就有很多變形,比如說求使最大權(quán)值邊最小的路徑,二維dijikstra。比如說floyed算法不僅看可以求最短路徑,還可以做傳遞閉包,如果求最短路如果出現(xiàn)負權(quán)邊的時候dijkstra算法就行不通了,這個時候就得用bellman_ford算法,但是bellman_ford算法效率太低,這個時候就得用優(yōu)化的SPFA算法、再比如所prim最小生成樹算法也有諸如求次小生成樹,判斷最小生成樹的唯一性等變形
。
每學一種算法的時候可以先看書或者上網(wǎng)查,搞清楚原理之后,可以從oj上找一些這類算法的簡單題做,然后對這個算法比較熟了之后就可以找一些這種算法的變形等比較難的題目做。還有一點很重要的是要注意做好總結(jié),沒做完一個題目可以寫下這題的解題報告,說明用什么算法做的,要注意什么問題,以后要看的時候比較方便。至于寫在博客還是qq空間上,或者記事本里就因人而異了。
其次,AC一道題目以后不要就這么算了了。可以跟別人對比一下代碼長度,運行時間。也可以去網(wǎng)上搜一下其他人的解題報告,看一下別人是怎么寫的。研究一下為什么別人的代碼比自己短,運行時間比自己快;
(3) 關(guān)于編程
**編程環(huán)境
------------常有的編輯器一般有VC,devC,neatbeans等,個人比較喜歡用VC,感覺VC調(diào)試起來比較方便。下面簡單介紹一下VC的調(diào)試方法:
F5----開始調(diào)試
Shift+F5------停止調(diào)試
F10---單步調(diào)試,
F11---跟進到所有代碼的函數(shù)內(nèi)部
Shift+F11---------從當前函數(shù)中跳出
F9------設(shè)置(取消)斷點
Alt+F9------高級斷點設(shè)置
ctrl+F10-------運行到光標處
**編程的時候有一些小問題:
(1) 一些傻逼錯誤比如說i寫成j,數(shù)字0寫成字母o。“==”寫成賦值符號“=”(這都是我常犯的錯誤),注意字母大小寫。還有比如說定義了全局變量就不要再main函數(shù)里再定義一遍了,否則就會導(dǎo)致變量重定義,出不了sample
(2) 還要注意oj上編輯器的問題,有寫題目用C++超時,用G++卻神速無比,有時候又反過來,所以一些題目不妨用兩個編輯器都交一下。又比如說一些涉及精度的題只有用C++交才能AC。
(3) 看到題目的時候先注意一下數(shù)據(jù)規(guī)模,是改用int,還是long或是double,數(shù)組應(yīng)該開多大。
(4) 經(jīng)典問題。
因為我搞圖論搞的比較多下面就介紹一下圖論的經(jīng)典算法吧
除了以上介紹的基本的圖論算法外,比較經(jīng)典的有:
A、
最優(yōu)比例生成樹;
B、
最小樹形圖:(其實就是最小生成樹,不過邊事有向的)
C、
強聯(lián)通分量
D、
啟發(fā)式搜索A*算法求最短路
E、
最小度限制生成樹
PS:這些都是比較經(jīng)典也比較難的算法,建議初學者先不要搞,等到有一定算法基礎(chǔ)的時候再來研究。
(5) 關(guān)于比賽
個人賽沒什么好說的,說一下組隊賽吧。開使的時候我是和馮紅霞和張越宇組了女隊,當時覺得自己很菜,也沒有想去參加什么比賽,剛開始我們是這樣分配任務(wù)的,我主攻--------圖論、搜索,Fhx主攻------字符串,模擬,zyy主攻-----數(shù)學,貪心,其他大家搞。開始組隊賽的是候比較不正規(guī),大家都是各自用自己的電腦做題然后提交(正式比賽時三個人一臺電腦),感覺壓力比個人賽要小很多。不過幾場比賽下來成績不是很理想。
后來馮紅霞由于太忙退出了ACM的比賽,羅老師就讓王碩鴻加入了我們隊員的情況。后來羅老師為我們申請到了比賽的名額,我們就參加了上海的regional比賽。先介紹一下我們隊的情況
隊伍名:CFZ_SG
下面介紹一下我的兩個隊友,
王碩鴻--=---主要負責計算幾何和模擬,有名的切題神速的人,大二里目前在pku上作題最多的mm。因為做題多,對dp,貪心等算法也有一定研究(除了圖論,以至于我圖論卡思路的時候沒人可以討論),coding速度較快(但是有時也會nc)。
張越宇-------主要負責數(shù)學題,邏輯思維比較好(還是數(shù)模強人哦)。但是coding比較慢,做的題目比較少,代碼能力比較差。
(6)總結(jié)一下我個人的悲劇
悲劇之一
----------起步晚,大二下學期才開始ACM 的學習,大一的時候有很多空閑的時間都不知道干什么了,大二的時候信工的課是處了名的多,導(dǎo)致很難抽出時間花在ACM上;
悲劇之二-
---------關(guān)于算法的學習沒有掌握正確的方法。對于算法沒有研究深研究透,這可能也是我們隊在regional比賽悲劇的重要原因之一。平時喜歡在pku上刷題,但是不太注意總結(jié),對算法的理解并不深刻,不能獨立coding出來,只會套模板。上海熱身賽和現(xiàn)場賽的A題DFS我們都沒有出,原因就是對DFS的理解并不深刻。
(7)、關(guān)于退役
可能是因為忙著考研或者出國或者工作,我們學校的很多ACMer到了大三就退役了,如果我現(xiàn)在就退役的話,ACM對我來說就真的是一個悲劇+慘劇,一個學期+一個暑假,唯一的regional如此悲劇,實在不甘心啊,總之有機會我還會繼續(xù)努力的,但是機會總是給有準備的人,所以課余有時間我還是會努力提高coding水平的,計劃是:圖論更進一步研究,dp,貪心,搜索繼續(xù),模擬要加強。
(八)特別鳴謝
** 05級學長尹慶,在我們暑假的集訓的時候來給我們組織比賽和獎題.,包括個人賽組隊賽,和網(wǎng)絡(luò)賽.,強烈建議學校聘請yq做ACM的指導(dǎo)教練...
**教練羅老師,感謝羅老師為我們爭取到了去東華的名額,給我們這次鍛煉的機會…
**ssjia 因為感覺比較面善,所以經(jīng)常問他算法上的問題,幫我解決了不少疑問….
**ben1222 可以說是入門teachar吧….
**隊友sh和zyy,特別是sh,陪我度過了暑假集訓的美好時光,讓我更加體會到了ACM的無窮魅力……
posted on 2009-11-10 11:45
ccyy 閱讀(1434)
評論(3) 編輯 收藏 引用 所屬分類:
Life for ACM