美國計算機奧林匹克競賽USACO題型分析|不同編程基礎(chǔ)怎么備考?
點擊上方藍色字關(guān)注我們吧!
USACO(美國信息學(xué)奧林匹克競賽)含金量?哪類學(xué)生需要參加?通過率怎么樣?USACO題型分析!USACO接受哪些編程語言比賽?.對于沒有編程基礎(chǔ)的學(xué)生如何備賽USACO?不同編程基礎(chǔ)的孩子建議從什么語言入手?
USACO(United States of America Computing Olympiad, 美國計算機奧林匹克競賽) 是一項針對全世界所有的高中信息學(xué)競賽選手的一項競賽。專門為信息學(xué)競賽選手準(zhǔn)備,但必須在注冊后才能進入題庫。這項賽事不僅可以培養(yǎng)學(xué)生的算法和編程思維,好的競賽成績還能給孩子大學(xué)申請加分。
由于有些編程題跟谷歌,臉書等頂級科技公司面試題類似,好的USACO競賽成績對孩子以后申請實習(xí)也大有裨益。AI時代,計算機編程是一項不可或缺的能力,理工院校對其青睞有加。
MIT 2024屆早申錄取的兩名大陸學(xué)生中,其中一名學(xué)生在中國的NOI比賽(美國對應(yīng)的是USACO比賽)中獲得金牌(全國前50名),入選信息學(xué)國家集訓(xùn)隊,同時保送清華大學(xué)(這是公開政策,獲得金牌可保送清北)。
USACO含金量
對于準(zhǔn)備出國留學(xué),打算申請理工科,尤其是計算機/編程方向的孩子來說,USACO不僅培養(yǎng)學(xué)生的算法及應(yīng)用和編程思維,成績含金量也不言而喻,獲得黃金級、白金級的參賽者將大大增加被藤校錄取的概率!
USACO不僅在美國大學(xué)中認(rèn)可度高,在美國國內(nèi)參與度廣,而且在全球也具有比較廣泛的參與度。上賽季首場比賽參賽人數(shù)達到10752人,同比增長了40%!USACO真的是一場國際賽事!
在MIT(麻省理工學(xué)院)本科招生官網(wǎng)中,可以赫然看到USACO是被“點名”推薦的課外活動。
而且,大家說USACO是免費的CSP-J/S也不是沒有理由的。
在美國,USACO是可以直接對標(biāo)國內(nèi)的NOI競賽的,每年也會舉辦多次選拔賽,分為銅、銀、金、白金四個獎項。無論是NOI還是USACO都是為IOI選拔人才的競賽。
所以,能在USACO競賽中取得一定成績的學(xué)生,絕對是妥妥的背景提升!
適合學(xué)生:任意年級中學(xué)生
USACO在每年12月至次年4月間,會舉辦4場比賽,參賽者可在同一年內(nèi)多次參賽。與其他全球性賽事出分、晉級最少需要10天不同,USACO采用機器評分機制,代碼提交后系統(tǒng)會自動給出評分。
注意:考生提交代碼后,會立即得到反饋結(jié)果。通常的反饋結(jié)果包括:全部通過、部分通過、編譯錯誤、超時、運行錯誤等。雖然能立即得到反饋,但只有在比賽結(jié)束后,才能看到測試數(shù)據(jù)哦!
賽制規(guī)則
在賽事窗口開放的三天時間內(nèi),選擇任意時間開始比賽,只要實力足夠,一場可以升到白金級。
其他選手需要等3天賽程結(jié)束后,根據(jù)分?jǐn)?shù)線決定是否晉級。
銅級
參賽資格:一進入USACO注冊帳號即為銅級
難度等級:銅級考試只要基本編程常識,會至少一種編程語言。根據(jù)以往比賽來看,銅級的比賽時間還是較為寬裕的,大部分選手能在一次比賽中進入到銀級。一般USACO銀級的題目可以等于國內(nèi)NOIP(現(xiàn)CSP)普及組試題難度
需要考核知識點:基礎(chǔ)數(shù)組,多重循環(huán),復(fù)合判斷、枚舉算法
銀級
參賽資格:通過銅級比賽的選手
難度等級:需要基本的問題解決能力的簡單算法(例如:貪心算法、遞歸搜索等),還需了解基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)。從銀級開始,選手需要尋找更好的的算法才能使程序在規(guī)定時間內(nèi)跑完。一般USACO白銀級的題目可以等于國內(nèi)NOIP(現(xiàn)CSP)提高組試題難度
需要考核知識點:基本數(shù)據(jù)結(jié)構(gòu)、貪心、遞歸、遞推等基本算法
金級
參賽資格:通過銀級比賽的選手
難度等級:需要有一定的算法基礎(chǔ),理解一些抽象的方法(例如:最短路徑、動態(tài)規(guī)劃),并對數(shù)據(jù)結(jié)構(gòu)有比較深刻的了解。IOI試題>金組試題>NOIP試題
需要考核知識點:堆、棧、樹、鏈表等高級數(shù)據(jù)結(jié)構(gòu),動態(tài)規(guī)劃等高級算法,算法時間和空間復(fù)雜度
白金級
參賽資格:通過金級比賽的選手
難度等級:需要有很高的編程基礎(chǔ),對算法有深入的了解。部分試題最后的優(yōu)化方案,可能不止一個,得出的答案也不止一個
需要考核知識點:各類高級的數(shù)據(jù)結(jié)構(gòu),尤其是需要算法的時間和空間復(fù)雜度,總分1000分。每道題333.3分。每道題有10個測試點,通過一個可得33.33分。青銅、白銀、黃金、鉑金級別的比賽都是3道題。
考試的進階
USACO 每年舉辦好幾次考試,其中最后一次考試叫US Open。在US Open之前有3次考試,前3次考試各有4個小時,最后一次考試是5個小時。在規(guī)定的時間之內(nèi),考生需要把復(fù)雜的題目進行理解和分析然后推導(dǎo),并且使用算法來解決它,最終需要再把這個代碼提交到官方網(wǎng)站上,然后通過官方網(wǎng)站的測試數(shù)據(jù)判斷,獲得那道題目的分?jǐn)?shù)。
當(dāng)考生考完某個級別的考試,達到了一定的分?jǐn)?shù)線,這位學(xué)生就可以被 promote 到下一個級別。那么當(dāng)學(xué)生到了 Platinum 級別之后,他將有可能獲得一個該年度進入國家集訓(xùn)隊的機會。
支持的語言
USACO 競賽支持不同的語言,但支持最多的還是 C++,當(dāng)然也有參賽者使用 Java,少量使用 Python 以及 C語言。C++ 在編程競賽的效率方面更加占有優(yōu)勢。
通過率
看了每個級別的考試的參賽的人數(shù),那么有多少人能夠考過?在2019~2020賽季, Bronze 過的人數(shù)比較多,通過率大概在19%左右。到了去年和今年,就在10%出頭以及15%左右。
綜合來看,過去三年 Bronze 通過率就在15%左右。
Silver 在前年也就是2019~2020賽季,是在5%;在2020~2021賽季是6%左右;到今年的話也是有所降低。
而 Gold 的通過率大概在 2% 到 3% 左右。
題目的難度也是在逐漸增加。尤其是在今年,我們明顯感覺到有個別題目原來應(yīng)該出現(xiàn)在 Gold 這個級別,但現(xiàn)在開始出現(xiàn)在 Silver 這個級別的最難那道題。
Gold 那就更不必說,在兩年前 Gold 和 Bronze 以及 Silver 類似,是偏知識性的這種級別,只要把知識點學(xué)過了,那么孩子就能夠比較舒服的通過 Gold,當(dāng)然也要做適當(dāng)?shù)木毩?xí)。但是從去年開始包括今年,我們明顯發(fā)現(xiàn) Gold 題目出現(xiàn)了更多的套路,需要孩子投入更多的時間來做模擬測試,然后做更多練習(xí)。
題型分析
首先說?Bronze。我們對過去三年的題目做一個大致分析,題目有三種。
1. simulation
考生只需要用 algorithm 和 coding 實現(xiàn)一個process就可以。
2. greedy algorithm
這類題目相對有一點tricky,需要孩子有更多的 observation 以及 analysis 方面的訓(xùn)練。
3. search
這也就是我們俗話說的暴力法,就是要能用一種枚舉的思路來思考問題。
Bronze 級別,掌握了這三種基本題型的解題方法,在知識角度就沒有太大問題,剩下的主要在編程能力方面,是否能夠把這三種題目的 algorithm 轉(zhuǎn)化為 coding,并且能夠正確的通過 test case。
Bronze 總共三道題。很多時候 USACO 可能認(rèn)為把第一道題放在最簡單的一個位置,但其實從結(jié)果來反推并不是這樣,有時候最后一道題反而是最簡單的,所以推薦孩子上來不要看了第一題之后就立刻去寫,而是先把三道題都看一遍。
我們應(yīng)該努力把簡單和中等難度兩道題目拿滿分??偣矟M分是1000分,Bronze 分?jǐn)?shù)線在 700-750,兩道題差不多是666分左右,也就是說我們并不需要最難的第三道題目完全做出來,只要能拿到一部分分?jǐn)?shù)超出分?jǐn)?shù)線,就能夠通過 Bronze 考試。
● Simulation題注意點
Simulation 這種題目推薦孩子掌握一個比較穩(wěn)固的編程基礎(chǔ),另外讀題目一定要小心,有時候讀錯一道題的話,可能花了更多的時間在思考上面,最后突然發(fā)現(xiàn)題目讀錯,那就損失比較大。
● Greedy Algorithm題注意點
Greedy Algorithm最重要的其實不是編程,編程部分通常來講都非常的容易,更加難的一點是什么?是判斷這道題是否能夠用 greedy algorithm 來解決,這反而是最難的。
這里有很重要的一點:我們很多時候不需要去證明 Greedy 的性質(zhì),因為證明有的時候會更加復(fù)雜更加難,很多時候是需要做一個假設(shè),然后再找找看有沒有反例能夠推翻。如果沒有發(fā)現(xiàn)很明顯的反例,其實就可以試一試,因為 Greedy Algorithm 在寫程序的時候往往簡單,通過幾個循環(huán)就能解決掉。所以我們一直告訴孩子,在遇到 Greedy Algorithm 的時候該怎么做。同時,Greedy 的算法因為復(fù)雜度較低,所以通常它的數(shù)字非常大,就是題目所出的數(shù)據(jù)范圍會非常的大。
● search題注意點
search 題目主要是 dfs 和 bfs,然后需要孩子對 complexity 有一定的了解。這種題型有一種偏幾何的題目,往往是跟矩形的邊界判定,或者是坐標(biāo)系有一定關(guān)系,但還沒有難到計算幾何的難度,所以這個地方只要把往年的一些幾何題過一過,也就夠了。
對于比較難的問題,我們不是特別推薦在 Bronze 級別做專門的準(zhǔn)備,更需要的是什么?更需要的是孩子往更高的知識點學(xué)習(xí),去學(xué)習(xí) Silver 知識點,或者更高級的知識點。那么等到某一天回過頭來,其實就已經(jīng)形成了一個降維打擊。
來到?Silver級別,很明顯就多了很多 topics,比如除了剛才的 simulation 以及 search 之外,增加了graph 還有DP,DP就是 dynamic programming 動態(tài)規(guī)劃,還有 counting 和 data structure。其中 dynamic programming 這種題型是 21年新出現(xiàn)的,以前從來沒有在 Silver 出現(xiàn)過,都是在 Gold 出現(xiàn)。本賽季 Silver 級別考試 Graph 出現(xiàn)的也越來越多,這樣 Silver 也會比以前更加有挑戰(zhàn)性。
競賽常見問題
1.對于沒有編程基礎(chǔ)的學(xué)生如何備賽?
建議從python或者java入手,上手較快。學(xué)習(xí)主要內(nèi)容為數(shù)據(jù)結(jié)構(gòu),編程語法,配合一定強度的練習(xí),可以初步通過第一輪銅級的選拔。
2.對于有部分編程基礎(chǔ)的學(xué)生如何備賽?
比如在讀AP計算機的高一高二同學(xué)可以從C++或者C入手。作為編程語言中強大且基礎(chǔ)的兩門,無論是應(yīng)付比賽還是在以后讀本科或者工作中使用,提前學(xué)習(xí)C++和C都是不錯的選擇。
3.對于有編程基礎(chǔ)及編程經(jīng)驗的學(xué)生如何備賽?
比如參加過國內(nèi)NOI的同學(xué),設(shè)定的目標(biāo)可以直接沖擊至少金級別以上的獎項。
在有數(shù)據(jù)結(jié)構(gòu)和編程語法的前提下,需要系統(tǒng)的學(xué)習(xí)一些常見算法,比如排序等等。同時大量練習(xí)官方的金,白金級別的真題。
需要了解chuo我~