美國計算機編程算法競賽 USACO (www.usaco.org)是一個電腦編程以及算法競賽。為每年的國際計算機競賽IOI (Informatics Olympiad International) 選拔美國隊隊員。
計算機奧賽(USACO)與數(shù)學(xué)奧賽(USAMO),都是國家National 級別的奧賽,是美國國家隊選拔賽。參加兩個國際奧林匹克賽的美國選手是通過這兩個全國比賽層層選拔出來的。AMC考察數(shù)學(xué),USACO考察編程和算法。USAMO的參加的學(xué)生很多,相對參加USACO的要少些。因為參加人數(shù)不是太多,比數(shù)學(xué)競賽更容易入圍,進級。
USACO 和 AMC:
AMC10≈USACO Bronze
AMC12≈USACO Silver
AIME≈USACO Gold
USAMO≈USACO Platinum
USACO是一個“算法”競賽,這意味著參賽者需要用創(chuàng)造和系統(tǒng)的方法來解決問題,而不僅僅是直接把程序的描述直接轉(zhuǎn)換成代碼。例如,“找出列表里面最大數(shù)字的位置”是一個非常簡單的算法問題,但“寫出先畫一個圓圈,再畫一個正方形的指令”就是另外一回事了。
USACO 參賽形式
通過登錄USACO官網(wǎng),在線提交代碼的形式參賽。在比賽規(guī)定的時間范圍內(nèi)(通常是4天,期間覆蓋一個周末。你有4天的時間來開始比賽選擇一個適合你的時間,競賽不允許有任何外部幫助和合作。一旦比賽開始,你有3-4個小時的時間查看和解決3個獨立的編程問題。在線打開題目,在線提交代碼。代碼提交后,系統(tǒng)會自動給出評分。從打開題目算起,選手需要完成3道題目。代碼提交后,系統(tǒng)會自動給出評分,如果拿到了滿分,系統(tǒng)會提示直接晉級,則可在本次月賽中繼續(xù)挑戰(zhàn)更高難度的試題。一般情況下,月賽考試結(jié)束后,會劃出晉級分?jǐn)?shù)線。如果成功晉級,可在下個月的比賽中參加更高級別的競賽。
所有3個編程問題的分值都是333.333分,總分是1000分。對于每個問題,分?jǐn)?shù)在每個測試案例中平均分配。如果問題1有10個測試案例,問題2有11個,問題3有12個測試案例,那么問題1的每個測試案例價值33.33分,問題2的每個測試案例價值30分,而問題3的每個測試案例價值27.77分。
注冊USACO也很簡單,只需要在www.usaco.org注冊一個免費賬戶,注冊時你不需要選擇特定的比賽日期。只要你有了這個賬戶,可以在比賽日期隨時參與競賽。USACO 競賽是完全免費的!你只需要注冊一個賬戶,就可以參加比賽了。USACO 解題絕對不可以在網(wǎng)上復(fù)制別人的代碼!不要復(fù)制抄襲,一經(jīng)發(fā)現(xiàn)永久封號。
USACO 參賽時間
USACO在每年12月-次年3月,每個賽季有4場比賽. 12月月賽, 1月月賽, 2月月賽, 3月公開賽。前三場比賽的形式是相同的。請查看USACO網(wǎng)站的主頁最新發(fā)布時間。
USACO 12月考試是4次中最容易的一次,秋季班沖刺至關(guān)重要。錯過了要等一年,考題每年難度都在大幅度提升,考試形式也可能變化。12月的月賽通常是圣誕前的一個周末,當(dāng)場出成績,一周內(nèi)放榜,也非常適合在RD的截止前沖擊申請材料的最后一個閃光點。1,2月份的成績也可以作為申請遞交完畢最好的補充材料。
USACO 參賽級別
USACO 競賽有4個級別,銅級,銀級,金級,白金級。每個級別代表不同的編程技能水平。在每場月賽中,題目難度分為銅級、銀級、金級、鉑金級四種級別,難度依次提高。新注冊的選手從銅級開始,在規(guī)定的時間內(nèi)完成3道題目,如果過關(guān),可晉級到更高級別。
每個人都必須從銅級開始參賽。在每個USACO比賽中,每個技能水平都有一個比賽(例如,銀級選手不會和銅級選手參加同一個比賽)。以下是每個級別的編程比賽中你需要知道的內(nèi)容/如何通過每個級別的編程比賽。
銅級:是USACO的基礎(chǔ)級別。主要考察編程知識的掌握程度,排序、二分查找。大多數(shù)銅級問題沒有像高級別的那樣有很多效率問題。要能夠解釋一個編程問題。知道/能夠創(chuàng)建基本算法和邏輯。循環(huán),數(shù)組,內(nèi)部算法,知道/能夠?qū)⒆约旱南敕ㄞD(zhuǎn)化為代碼。
銀級:銀級考試比銅級考試要難得多。涉及遞歸搜索、貪心算法等基本的問題求解技術(shù);了解最基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)概念,?要考察效率問題。?
金級:設(shè)計更復(fù)雜的標(biāo)準(zhǔn)算法(例如最短路徑,動態(tài)規(guī)劃等),熟練掌握數(shù)據(jù)結(jié)構(gòu),主要考察效率問題。?
鉑金級:對算法有深入了解,熟練應(yīng)用,能解決復(fù)雜問題、開放問題。
USACO 參賽語言
可以使用的參賽編程語言列表如下:Java、C++ 17、C++ 11、C、Python 2 (2.7.17)、Python 3 (3.6.9)
C++是奧計考試的主選語言之一,起步難但程序緊湊效率高,適合金級以上考生利用網(wǎng)上資料自學(xué)自修。C++是高效編程語言,網(wǎng)上有很多資料,適合金級白金級自學(xué),但語言難學(xué),初學(xué)者進步很慢。
Java是奧計考試的主選語言之一,易學(xué)易升級,又可以拿到APComputer高分。
Python是奧計考試的主選語言之一,易學(xué)易考,適合人工智能和機器學(xué)習(xí),是當(dāng)今的大熱門。
USACO 參賽評級
USACO系統(tǒng)自動評分。測試案例的數(shù)量會因問題而異(通常為10個左右)。每個測試案例都有相等的分值,所有測試案例的總分值為333分。有時,較早的測試用例在其所需的時間復(fù)雜度方面會明顯容易。這意味著,如果你的代碼效率很低,它應(yīng)該仍然能夠獲得前幾個測試用例的部分積分。重新提交沒有任何懲罰。
但是,如果你多次提交,你提交的最后一次(不是最好的)將被算作你的分?jǐn)?shù)。如果你的程序不能編譯,缺少輸出,或有運行時錯誤,提交將失?。▽⒉槐辉u分),你將被告知錯誤。在評分開始前,你的程序也必須首先獲得樣本案例的正確性。
一旦你的程序通過了初始編譯和樣本測試案例,它將針對所有的測試案例運行。對于導(dǎo)致測試用例失敗的原因,有幾個可能性:
T:超時(在Java和Python中為你提供4秒,在其他語言中為你的代碼成功運行并返回解決方案提供2秒)。
!: 運行時錯誤(典型的運行時錯誤,但也包括超過內(nèi)存限制,這很罕見,但可能發(fā)生)
X:錯誤的答案(你對測試案例的答案是不正確的)
如果你能在比賽中得到1000/1000分(通過每一個測試案例),你就會得到一個比賽中的晉升。(獲得賽中晉級的分?jǐn)?shù)有時會低于1000分,不過這種情況非常罕見)。這意味著你可以在當(dāng)前4天的競賽窗口中開始下一級的競賽(你不必等待窗口結(jié)束來獲得晉升。)
否則,你必須等到窗口結(jié)束后才能晉級。USACO將根據(jù)比賽結(jié)果計算出截止分?jǐn)?shù),如果你的分?jǐn)?shù)高于截止分?jǐn)?shù),你將被提升到下一個級別。根據(jù)不同的比賽,高于750分或800分的分?jǐn)?shù)通常會讓你晉升。
然而,作為USACO全國錦標(biāo)賽的美國公開賽有一些小的區(qū)別(其他方面都是一樣的)。問題的難度要大得多。比賽時間多1小時。
USACO 的含金量
USACO是美國大學(xué)申請過程中非常有含金量和競爭力的一個STEM競賽。USACO還有一個更大的好處在于,實用性很廣,實戰(zhàn)性很強。就算不參加奧林匹克比賽。USACO也能夠幫助孩子在最短的時間內(nèi),有效的提高和掌握電腦編程語言,增加電腦技能。對孩子將來的發(fā)展有更深遠的影響和幫助。隨著STEM教育的理念,及編程低齡化,普及化的發(fā)展,USACO的參賽人數(shù)和熱度越來越高。
USACO是不僅僅是一項可以讓申請者迅速提高STEM,編程算法學(xué)術(shù)背景的比賽,編程本身作為一門使用技能也會讓學(xué)理工科的學(xué)生受益終生,即便是商科文科的同學(xué),編程訓(xùn)練本身帶來的思維優(yōu)勢也可以極大的促進學(xué)習(xí)。
因為大量的中國學(xué)生熱衷于參加熱門的美國數(shù)學(xué)奧賽、美國化學(xué)奧賽,所以USACO在中國的普及度并不高。這意味著參賽選手少,獲獎選手也少,含金量自然更高。
免費報考指南課程/定制考試計劃/留學(xué)教材/核心內(nèi)部資料 一鍵領(lǐng)取