美國計算機奧林匹克競賽USACO題型分析

USACO(United States of America Computing Olympiad, 美國計算機奧林匹克競賽) 是一項針對全世界所有的高中信息學競賽選手的一項競賽。專(zhuan) 門為(wei) 信息學競賽選手準備,但必須在注冊(ce) 後才能進入題庫。這項賽事不僅(jin) 可以培養(yang) 學生的算法和編程思維,好的競賽成績還能給孩子大學申請加分。

由於(yu) 有些編程題跟穀歌,臉書(shu) 等頂級科技公司麵試題類似,好的USACO競賽成績對孩子以後申請實習(xi) 也大有裨益。AI時代,計算機編程是一項不可或缺的能力,理工院校對其青睞有加。

MIT 2024屆早申錄取的兩(liang) 名大陸學生中,其中一名學生在中國的NOI比賽(美國對應的是USACO比賽)中獲得金牌(全國前50名),入選信息學國家集訓隊,同時保送清華大學(這是公開政策,獲得金牌可保送清北)。

USACO含金量

對於(yu) 準備出國留學,打算申請理工科,尤其是計算機/編程方向的孩子來說,USACO不僅(jin) 培養(yang) 學生的算法及應用和編程思維,成績含金量也不言而喻,獲得黃金級、白金級的參賽者將大大增加被藤校錄取的概率!

USACO不僅(jin) 在美國大學中認可度高,在美國國內(nei) 參與(yu) 度廣,而且在全球也具有比較廣泛的參與(yu) 度。上賽季首場比賽參賽人數達到10752人,同比增長了40%!USACO真的是一場國際賽事!

在MIT(麻省理工學院)本科招生官網中,可以赫然看到USACO是被“點名”推薦的課外活動。

而且,大家說USACO是免費的CSP-J/S也不是沒有理由的。

在美國,USACO是可以直接對標國內(nei) 的NOI競賽的,每年也會(hui) 舉(ju) 辦多次選拔賽,分為(wei) 銅、銀、金、白金四個(ge) 獎項。無論是NOI還是USACO都是為(wei) IOI選拔人才的競賽。

所以,能在USACO競賽中取得一定成績的學生,絕對是妥妥的背景提升!

適合學生

任意年級中學生

USACO在每年12月至次年4月間,會(hui) 舉(ju) 辦4場比賽,參賽者可在同一年內(nei) 多次參賽。與(yu) 其他全球性賽事出分、晉級最少需要10天不同,USACO采用機器評分機製,代碼提交後係統會(hui) 自動給出評分。

注意考生提交代碼後,會(hui) 立即得到反饋結果。通常的反饋結果包括:全部通過、部分通過、編譯錯誤、超時、運行錯誤等。雖然能立即得到反饋,但隻有在比賽結束後,才能看到測試數據哦!

賽製規則

賽製規則

在賽事窗口開放的三天時間內(nei) ,選擇任意時間開始比賽,隻要實力足夠,一場可以升到白金級。

其他選手需要等3天賽程結束後,根據分數線決(jue) 定是否晉級。

銅級

參賽資格:一進入USACO注冊(ce) 帳號即為(wei) 銅級

難度等級:銅級考試隻要基本編程常識,會(hui) 至少一種編程語言。根據以往比賽來看,銅級的比賽時間還是較為(wei) 寬裕的,大部分選手能在一次比賽中進入到銀級。一般USACO銀級的題目可以等於(yu) 國內(nei) NOIP(現CSP)普及組試題難度

需要考核知識點:基礎數組,多重循環,複合判斷、枚舉(ju) 算法

銀級

參賽資格:通過銅級比賽的選手

難度等級:需要基本的問題解決(jue) 能力的簡單算法(例如:貪心算法、遞歸搜索等),還需了解基礎數據結構。從(cong) 銀級開始,選手需要尋找更好的的算法才能使程序在規定時間內(nei) 跑完。一般USACO白銀級的題目可以等於(yu) 國內(nei) NOIP(現CSP)提高組試題難度

需要考核知識點:基本數據結構、貪心、遞歸、遞推等基本算法

金級

參賽資格:通過銀級比賽的選手

難度等級:需要有一定的算法基礎,理解一些抽象的方法(例如:最短路徑、動態規劃),並對數據結構有比較深刻的了解。IOI試題>金組試題>NOIP試題

需要考核知識點:堆、棧、樹、鏈表等高級數據結構,動態規劃等高級算法,算法時間和空間複雜度

白金級

參賽資格:通過金級比賽的選手

難度等級:需要有很高的編程基礎,對算法有深入的了解。部分試題最後的優(you) 化方案,可能不止一個(ge) ,得出的答案也不止一個(ge)

需要考核知識點:各類高級的數據結構,尤其是需要算法的時間和空間複雜度,總分1000分。每道題333.3分。每道題有10個(ge) 測試點,通過一個(ge) 可得33.33分。青銅、白銀、黃金、鉑金級別的比賽都是3道題。

考試的進階

USACO 每年舉(ju) 辦好幾次考試,其中最後一次考試叫US Open。在US Open之前有3次考試,前3次考試各有4個(ge) 小時,最後一次考試是5個(ge) 小時。在規定的時間之內(nei) ,考生需要把複雜的題目進行理解和分析然後推導,並且使用算法來解決(jue) 它,最終需要再把這個(ge) 代碼提交到官方網站上,然後通過官方網站的測試數據判斷,獲得那道題目的分數。

當考生考完某個(ge) 級別的考試,達到了一定的分數線,這位學生就可以被 promote 到下一個(ge) 級別。那麽(me) 當學生到了 Platinum 級別之後,他將有可能獲得一個(ge) 該年度進入國家集訓隊的機會(hui) 。

支持的語言

USACO 競賽支持不同的語言,但支持最多的還是 C++,當然也有參賽者使用 Java,少量使用 Python 以及 C語言。C++ 在編程競賽的效率方麵更加占有優(you) 勢。

通過率

看了每個(ge) 級別的考試的參賽的人數,那麽(me) 有多少人能夠考過?在2019~2020賽季, Bronze 過的人數比較多,通過率大概在19%左右。到了去年和今年,就在10%出頭以及15%左右。

綜合來看,過去三年 Bronze 通過率就在15%左右。

Silver 在前年也就是2019~2020賽季,是在5%;在2020~2021賽季是6%左右;到今年的話也是有所降低。

而 Gold 的通過率大概在 2% 到 3% 左右。

題目的難度也是在逐漸增加。尤其是在今年,我們(men) 明顯感覺到有個(ge) 別題目原來應該出現在 Gold 這個(ge) 級別,但現在開始出現在 Silver 這個(ge) 級別的最難那道題。

Gold 那就更不必說,在兩(liang) 年前 Gold 和 Bronze 以及 Silver 類似,是偏知識性的這種級別,隻要把知識點學過了,那麽(me) 孩子就能夠比較舒服的通過 Gold,當然也要做適當的練習(xi) 。但是從(cong) 去年開始包括今年,我們(men) 明顯發現 Gold 題目出現了更多的套路,需要孩子投入更多的時間來做模擬測試,然後做更多練習(xi) 。

題型分析

首先說 Bronze。我們(men) 對過去三年的題目做一個(ge) 大致分析,題目有三種。

1. simulation

考生隻需要用 algorithm 和 coding 實現一個(ge) process就可以。

2. greedy algorithm

這類題目相對有一點tricky,需要孩子有更多的 observation 以及 analysis 方麵的訓練。

3. search

這也就是我們(men) 俗話說的暴力法,就是要能用一種枚舉(ju) 的思路來思考問題。

Bronze 級別,掌握了這三種基本題型的解題方法,在知識角度就沒有太大問題,剩下的主要在編程能力方麵,是否能夠把這三種題目的 algorithm 轉化為(wei) coding,並且能夠正確的通過 test case。

Bronze 總共三道題。很多時候 USACO 可能認為(wei) 把第一道題放在最簡單的一個(ge) 位置,但其實從(cong) 結果來反推並不是這樣,有時候最後一道題反而是最簡單的,所以推薦孩子上來不要看了第一題之後就立刻去寫(xie) ,而是先把三道題都看一遍。

我們(men) 應該努力把簡單和中等難度兩(liang) 道題目拿滿分。總共滿分是1000分,Bronze 分數線在 700-750,兩(liang) 道題差不多是666分左右,也就是說我們(men) 並不需要最難的第三道題目完全做出來,隻要能拿到一部分分數超出分數線,就能夠通過 Bronze 考試。

● Simulation題注意點

Simulation 這種題目推薦孩子掌握一個(ge) 比較穩固的編程基礎,另外讀題目一定要小心,有時候讀錯一道題的話,可能花了更多的時間在思考上麵,最後突然發現題目讀錯,那就損失比較大。

● Greedy Algorithm題注意點

Greedy Algorithm最重要的其實不是編程,編程部分通常來講都非常的容易,更加難的一點是什麽(me) ?是判斷這道題是否能夠用 greedy algorithm 來解決(jue) ,這反而是最難的。

這裏有很重要的一點:我們(men) 很多時候不需要去證明 Greedy 的性質,因為(wei) 證明有的時候會(hui) 更加複雜更加難,很多時候是需要做一個(ge) 假設,然後再找找看有沒有反例能夠推翻。如果沒有發現很明顯的反例,其實就可以試一試,因為(wei) Greedy Algorithm 在寫(xie) 程序的時候往往簡單,通過幾個(ge) 循環就能解決(jue) 掉。所以我們(men) 一直告訴孩子,在遇到 Greedy Algorithm 的時候該怎麽(me) 做。同時,Greedy 的算法因為(wei) 複雜度較低,所以通常它的數字非常大,就是題目所出的數據範圍會(hui) 非常的大。

● search題注意點

search 題目主要是 dfs 和 bfs,然後需要孩子對 complexity 有一定的了解。這種題型有一種偏幾何的題目,往往是跟矩形的邊界判定,或者是坐標係有一定關(guan) 係,但還沒有難到計算幾何的難度,所以這個(ge) 地方隻要把往年的一些幾何題過一過,也就夠了。

對於(yu) 比較難的問題,我們(men) 不是特別推薦在 Bronze 級別做專(zhuan) 門的準備,更需要的是什麽(me) ?更需要的是孩子往更高的知識點學習(xi) ,去學習(xi) Silver 知識點,或者更高級的知識點。那麽(me) 等到某一天回過頭來,其實就已經形成了一個(ge) 降維打擊。

來到 Silver級別,很明顯就多了很多 topics,比如除了剛才的 simulation 以及 search 之外,增加了graph 還有DP,DP就是 dynamic programming 動態規劃,還有 counting 和 data structure。其中 dynamic programming 這種題型是 21年新出現的,以前從(cong) 來沒有在 Silver 出現過,都是在 Gold 出現。本賽季 Silver 級別考試 Graph 出現的也越來越多,這樣 Silver 也會(hui) 比以前更加有挑戰性。

競賽常見問題

1.對於(yu) 沒有編程基礎的學生如何備賽?

建議從(cong) python或者java入手,上手較快。學習(xi) 主要內(nei) 容為(wei) 數據結構,編程語法,配合一定強度的練習(xi) ,可以初步通過第一輪銅級的選拔。


2.對於(yu) 有部分編程基礎的學生如何備賽?

比如在讀AP計算機的高一高二同學可以從(cong) C++或者C入手。作為(wei) 編程語言中強大且基礎的兩(liang) 門,無論是應付比賽還是在以後讀本科或者工作中使用,提前學習(xi) C++和C都是不錯的選擇。


3.對於(yu) 有編程基礎及編程經驗的學生如何備賽?

比如參加過國內(nei) NOI的同學,設定的目標可以直接衝(chong) 擊至少金級別以上的獎項。

在有數據結構和編程語法的前提下,需要係統的學習(xi) 一些常見算法,比如排序等等。同時大量練習(xi) 官方的金,白金級別的真題。

【競賽報名/項目谘詢+微信:mollywei007】

下一篇

2022HiMcM【A/B題】中文最新翻譯

你也可能喜歡

  • 暫無相關文章!

評論已經被關(guan) 閉。

插入圖片
返回頂部