close

紀錄: 基本上排名是在上升(?)

考試日期
解題數
排名
排名比例
評等
2020-06-09
7 / 7
7 / 1988
0.4%
專家級:熟悉各種進階演算法、資料結構,並具有優異的程式編寫能力。
2020-05-26
4 / 7
36 / 2252
1.6%
專業級:熟悉各種基礎的演算法、資料結構,並具有良好的程式編寫能力。
2019-12-17
5 / 7
24 / 2744
0.9%
專業級:熟悉各種基礎的演算法、資料結構,並具有良好的程式編寫能力。
2019-05-28
4 / 7
62 / 2279
2.7%
專業級:熟悉各種基礎的演算法、資料結構,並具有良好的程式編寫能力。
2019-03-26
5 / 7
18 / 2420
0.7%
專業級:熟悉各種基礎的演算法、資料結構,並具有良好的程式編寫能力。
2018-12-18
2 / 7
274 / 2624
10.4%
中級:具備基礎的程式編寫能力,能以程式處理簡單問題。
2018-10-02
2 / 7
329 / 2281
14.4%
中級:具備基礎的程式編寫能力,能以程式處理簡單問題。
2018-05-29
2 / 7
590 / 2181
27.1%
中級:具備基礎的程式編寫能力,能以程式處理簡單問題。
2018-03-27
1 / 7
676 / 2214
30.5%
初級:具有簡單的程式編寫能力,但尚不足以應付不同種類的問題。
2017-09-26
2 / 7
531 / 1854
28.6%
中級:具備基礎的程式編寫能力,能以程式處理簡單問題。

心得:

從大二開始去打CPE,一開始都很矇,都1~2題。到後來不停鑽研演算法,以及強化各個資料結構應用。終於進步到5題。

5題的時候確實是瓶頸,因為有些題目看到還是沒想法,像我最弱的就是dp跟貪心還有BFS。

從弱的下手,自從推甄完後,我開始狂練dp,去Leetcode打dp題,跟itsa題庫dp題幾乎全做完。

Leetcode周賽幾乎都有dp題,周賽就像小型的CPE,總共4題,我覺得比起CPE是比較容易的,不過第4題通常是困難題,dp或是高等演算法。

終於在畢業之前,將CPE破台,雖然說這次(6/9)的CPE真的是有點簡單(笑)。不過寫的有點抖,第5題寫很久,會疲乏(眼睛會痠,思考能力下降)。

有時候有簡單也有難的時候,反正多考多機會。

我的經驗告訴我,前3題都是暴力法,4~7中通常有一題是水題(就是暴力能過)

通常第4題都是那種偏數學,或是模擬。

第6題,常常都是生成樹或DP

第7題,通常噁心題

如何變強:

不停的練習題目,基礎到進階。以及狂打比賽(itsa,學校辦的比賽,校外比賽)

最好是要有固定的網站讓你練,Uva是最佳(因為CPE題目來源),uhunt那邊都有題目可以練(大推uhunt可以照著他的章節練,關鍵字: CP3)

不過我大一到大三好像也沒啥再練Uva,是大四突然覺醒

像我是LeetCode的周賽(四上~四下)在練,如果周賽破台基本上CPE破台也不難。你會發現,解題思路跟手速會越來越快(其實不一定拉,比賽難度範圍有Bias)

而且LeetCode在打的時候,可以看看別人的文章,收穫良多,學到高強資結跟演算法(Rolling Hash、LRU cache 、Trie、Tarjan algorithm等等)。

或者codeforces,atcoder等等,也是可。雖說類型不太一樣(偏思維題)。其實沒有一個正確答案。

但真的就是多練習題目,不要放棄。

再來,最好是CPE一顆星兩顆星題目可以做一下,熟悉一下他的模式,然後歷屆比賽,也可以多練練。

我用的是程式語言C++

首先:

我是C++/C混著用。有時候Scanf()很方便或是printf(),當然這樣或許不是很好的習慣,不過我是習慣了XD。

基本的字串轉數字(stoi之類的),數字轉字串(to_string())都要會。以及怎麼樣做無限輸入(cin直接放在while,scanf()的話是!=EOF)。

要會善用STL演算法,函式(比如: sort, next_permutation, lower_bound..等等)

有著基礎之後,至少水題都要會。

再來:

--資料結構--

stack,queue,deque,priority_queue,list 都要會用,STL都有容器可以用。

vector非常好用。tree的觀念也要有

Disjoint Set並查集 必須要會用,這超級好用,很多比賽都常常需要。

map,set必會。

--演算法--

太多,基礎是質數篩法,還有一些數學的基本觀念(幾何,三角函數等等)要有。

二分搜(當你發現答案是一個有順序的時候就能用用看,基本上就是猜答案)。

貪心法(典型的區間排序,或是灑水器問題,事實上貪心有時候比dp難)。

DP(至少要會背包,LCS,LIS,記憶化搜索,通常遇到遞迴求解,發現答案有重複,就能記憶化搜索存到state裡面)

圖論:  至少要會SPFA,Dijkstra。Floyd-Warshall,最小生成樹,DFS,BFS。

遞迴必須熟悉、枚舉(八皇后問題基礎必學)。

字串: kmp(蠻有趣的,建議學,二星題庫有)

以上都是必會。其他就自行體驗了(一時之間很難全說明),只能說經驗也是蠻重要的。

 

雜談:

--進階演算法--

CPE不太常出現,但是通常打競賽都遲早要接觸

-Max Flow(EK算法, Dinic): 通常大型比賽可能會有,不過難在建模,不常做這種題型是真的不會

-Min Cost (Max) Flow: 除了流量之外,搭配權重

-KM二分匹配: 二分圖,基本上有互不相干關係都能用上,比如男女必須配對之類的

-BitMask+DP: TSP會用到,以及其他能壓縮狀態的時候,然後又要爆搜的時候,自行體會

-Suffix Array, Trie:  2D找多字串搜索可以用Trie壓縮(LeetCode有題目)。SA的話,O(NlogN)算法要搞懂,要用上的時候真的很好用。

-Rolling Hash(Rabin Karp算法): 其實跟KMP用途一樣,找的時候加快,不過這個更猛,可以學一下,也是滑動窗口概念

-Sliding Window: LeetCode常出現,通常就是很重複,然後有些東西有範圍性,就能用到。

-倍增觀念,LCA,Fast Pow: LCA蠻不賴的,Pow就自己寫的時候可以用倍增方式加快,還有那該死的浮點數誤差==

-凸包: 好少做這種題型(幾何),因為我是拿來做最遠點對加速(ITSA)

-線段樹,BIT Tree: 學校自辦賽有出,通常就是要加速查找(區間最小值,最大值,和)的時候會用到。

-SCC強連通:  好像不常出現(UVa有),就是Tarjan算法,反正就一系列的都學一學?

-割點、橋: Tarjan算法,典型的題目。

當然不只這些,多多嘗試不同題型,會很有趣。腳踏實地的搞懂每個觀念。

 

說實在,我也不是到那麼資深,許多高難競賽演算法還沒設略,只能說坑就是要一直補,學得越多,新東西要摸索有些能依樣畫葫蘆,就可以比較快。

然後學到後面就發現,自己數學真的超差。ಥ_ಥ,到現在還不會FFT

 

arrow
arrow
    文章標籤
    cpe uva louisfghbvc 尾玉
    全站熱搜
    創作者介紹
    創作者 尾玉 的頭像
    尾玉

    louisfghbvc的部落格

    尾玉 發表在 痞客邦 留言(6) 人氣()