USACO,全稱為 United States of America Computing Olympiad (美國計算機(jī)奧林匹克競賽)。USACO是美國的中學(xué)生信息學(xué)奧林匹克競賽,地位等同于中國的NOI系列賽事。
不同的是,USACO面向全球信息學(xué)愛好者免費(fèi)開放,想?yún)⒓拥耐瑢W(xué)只要注冊好賬號在規(guī)定時間完成比賽即可。并且題目的質(zhì)量很高,非常適合想要在NOI系列賽事中沖擊高分的選手們。
USACO的訓(xùn)練場和比賽都堪稱信息學(xué)奧賽的經(jīng)典。國內(nèi)不少命題也會參考USACO的歷史原題,例如2019年CSP-J第三題“紀(jì)念品”,簡直和USACO 2009年2月場的“Stock Market”一模一樣!因此,有志于在國內(nèi)信息學(xué)奧賽中爭金奪銀的選手們想刷題時,強(qiáng)烈推薦USACO!
國內(nèi)信息學(xué)奧賽,每年一次,很多選手沒有足夠的賽事經(jīng)驗(yàn),在賽場上不能完美發(fā)揮自己的能力,一旦錯失機(jī)會,就要再等下一年;但是USACO每年有4場,如果實(shí)力足夠,每場都可以從青銅直接打到白金,且其題目難度及質(zhì)量比國內(nèi)信奧完全不逞多讓。對于想要增加信息學(xué)賽事經(jīng)驗(yàn)的選手來說,非常強(qiáng)烈推薦USACO!
打開USACO的官網(wǎng),第一眼便是IOI 2023國際信息學(xué)奧賽以及EGOI 2023歐洲女子信息學(xué)奧賽的美國隊成員公示信息,華人面孔占據(jù)了很大的比例。
USACO競賽備受美國名校關(guān)注,被哈佛、耶魯、麻省理工、康奈爾、普林斯頓、卡內(nèi)基梅隆等理工牛校認(rèn)可。每年吸引著眾多申請美國頂尖大學(xué)計算機(jī)專業(yè)的學(xué)生。
例如著名的羅哲正同學(xué),就是通過USACO進(jìn)入美國國家隊出戰(zhàn)IOI,并獲得了IOI金牌,最終進(jìn)入麻省理工。
對于計劃留學(xué)美國的選手,USACO是非常有含金量的履歷加分項(xiàng),對于這部分同學(xué),更是推薦USACO!
在USACO比賽中,中國學(xué)生可參加三場比賽和US Open公開賽。這些比賽的單場時長一般在3 – 4小時,沒有統(tǒng)一的開始時間和地點(diǎn)限制。選手只要在上述比賽的時間窗口內(nèi)(注意中美時差)登錄官網(wǎng),任選時間在線參賽即可,比賽會從選手進(jìn)到試題頁后開始計時。
USACO官網(wǎng):http://www.usaco.org/
注冊新賬號時,用英文正確填寫個人信息:昵稱、郵箱、名、姓氏、所在中學(xué)、高中畢業(yè)年份(已畢業(yè)/初中則輸入9999)、國籍(中國填寫CHN)。
*小學(xué)、初中選手則填寫所在小學(xué)或初中,畢業(yè)年份填寫9999。
郵件查收自己的賬號密碼,并登陸官網(wǎng)(24小時內(nèi)首次登陸方可激活,登錄后可修改密碼)。
以下圖示為某次比賽入口,其中第二張圖片的“Start the Contest!”一旦被點(diǎn)擊,選手的比賽用時就會立即倒計時,且無法暫停。
使用本地編譯器(比如Dev C++)寫完代碼后,把頁面滾到最底下,編程語言選擇C++,可以直接復(fù)制代碼提交,也可以提交cpp文件。
代碼提交后,如果程序運(yùn)行正確,則在題目頁面的最上方會出現(xiàn)如下綠色的標(biāo)識,每個綠色框表示一個測試用例,一般每道題目會有10個測試用例,如下:
同時,封面也會告知每道題的完成情況。下圖為上一賽季第一輪比賽的封面頁,點(diǎn)擊標(biāo)題即可查看相應(yīng)題目并提交程序,對于尚未提交的試題,封面頁會對應(yīng)顯示“Not submitted”;對于已經(jīng)提交的試題,封面頁會對應(yīng)顯示“Submitted and Graded”。
USACO目前支持C、C++、Pascal、Java、Python等五種編程語言。判分方式和NOI系列賽事相同,即依據(jù)程序所能正確求解的測試點(diǎn)數(shù)量按比例計分。對于各個測試點(diǎn),一般題目會標(biāo)注相應(yīng)的時限要求和內(nèi)存要求(如未具體標(biāo)注,則C/C++/Pascal默認(rèn)時限2秒,Java/Python默認(rèn)時限4秒,內(nèi)存均默認(rèn)256MB)。
以上為一個題目的評測示例,即最終包含了10個測試點(diǎn),其中7個正確、3個超時——綠色表示正確,紅色表示錯誤(x表示錯誤答案,t表示時間超限,!表示運(yùn)行時錯誤或內(nèi)存超限,e表示輸出文件為空,m表示找不到輸出文件)。
USACO允許選手在比賽時間內(nèi)多次提交自己的程序,最終評測和排名以最后一次提交的程序?yàn)橐罁?jù)。選手提交程序時應(yīng)正確選擇自己所使用的編程語言。
2020年12月起,USACO要求程序使用標(biāo)準(zhǔn)輸入輸出,相應(yīng)的文件名在題目中會有寫明。但務(wù)必注意的是,USACO的評測環(huán)境為UNIX,對于文件名的大小寫是敏感的,同時規(guī)定文件內(nèi)容的每一行均需以換行符’\n’結(jié)尾。
注意學(xué)術(shù)規(guī)范,不能團(tuán)隊做題、不能請教他人、不能查閱書籍、不能借助AI、不能使用自己以前的代碼、不能在比賽期間在線討論或公開自己的代碼,也不能注冊“小號”……總之,務(wù)必獨(dú)立解題、臨場發(fā)揮,否則會被終生禁賽!
USACO的月賽和公開賽目前設(shè)置有Bronze青銅組、Silver白銀組、Gold黃金組、Platinum白金組共4個難度組別。其難度和中國的NOI系列賽事對應(yīng)如下:
如果是初次參加,那么只能參與青銅組。達(dá)到相應(yīng)分?jǐn)?shù)之后就能晉級下一個組別,分?jǐn)?shù)線是根據(jù)整體的分?jǐn)?shù)按比例劃定的。USACO通常會在賽后一周發(fā)出邀請郵件。但如果能在比賽中獲得滿分,選手就有可能獲得當(dāng)輪的晉級——此時,如果本輪比賽的時間窗口還沒有關(guān)閉,選手就可以在這一輪繼續(xù)向更高的組別發(fā)起挑戰(zhàn)。