閱前須知
XCPC萌新互助進步群2??:174495261
博客主頁:resot (關注resot謝謝喵)
針對具體問題,應當進行具體分析;并無放之四海而皆準的方法可適用于所有人。本人尊重并支持每位學習者對最佳學習路徑的自主選擇。本篇所列訓練方法,僅為本人綜合實踐經驗提出的相對合理方案,供參考。
本文僅涉及幫助萌新快速理解算法競賽的常識,對于訓練方面僅涉及整體的大方向。
(上面那一段是gpt生成的)
這篇文章其實有很大程度是我想到什么寫什么,如果這篇文章有錯誤或者是后面又想到了什么,東西多了會寫第二版本(在這個版本的基礎上更新)
算法競賽的一些常見縮寫/黑話
縮寫 | 全稱(中文) | 簡要說明 |
---|---|---|
ACM | Association for Computing Machinery(美國計算機協會) | 國際計算機領域最悠久的專業組織之一。早期?ICPC?以“ACM?ICPC”冠名,因此“ACM”在華語社區常作為?ICPC?的口語簡稱。2018?年起?ICPC 獨立運營,但“ACM”一詞仍沿用。 |
ICPC | International Collegiate Programming Contest(國際大學生程序設計競賽) | 面向在校本科生/研究生的團隊式編程競賽,被視為大學階段最高級別賽事。區域賽(Regional)、全球總決賽(World Finals)兩級賽制,三人一隊,共用一臺電腦,五小時內解題。 |
CF | Codeforces | 俄羅斯團隊運營的在線評測與競賽平臺,以“Rating”體系聞名。常見賽事有 Round、Div.1/2/3、Educational Round 等,賽后可即時看到排名與官方題解。 |
AC / WA / TLE … | Accepted / Wrong Answer / Time Limit Exceeded 等判題結果 | 在線評測返回的常見狀態碼:AC 表示通過全部測試點;WA 輸出錯誤;TLE 超時;MLE 超內存;RE 運行期錯誤;CE 編譯錯誤等。 |
OJ | Online Judge(在線評測系統) | 廣義名詞,指提供自動評測服務的平臺,如 POJ、HDU、洛谷、AtCoder、Codeforces、LeetCode 等。 |
IOI | International Olympiad in Informatics(國際信息學奧林匹克) | 中學生級別的全球頂尖信息學競賽。各國通過本國選拔(如 NOI)確定代表隊,個人賽制,兩天各五小時,測試算法與實現能力。 |
NOI | National Olympiad in Informatics(中國全國青少年信息學奧林匹克競賽) | 中國 IOI 選拔體系核心賽事,面向高中生。成績優秀者可晉級 NOI 集訓隊,再經多輪選拔產生 IOI 國家隊。 |
黑話 | 說明 |
---|---|
ap | a批,泛指打算法競賽的選手 |
xcpc | icpc和ccpc的統稱 |
封榜 | 一些賽事會在比賽結束前一個小時封榜,即榜單會停滯在結束前一個小時的狀態 |
滾榜 | 因為封榜的存在所以大家無法直接得知最終排名,會在比賽結束后開滾榜環節,從后到前依次公布最終排名 |
vp | virtual participation,打一場在之前已經舉辦過的比賽 |
對拍 | 一種程序,很多時候不確定自己寫的符合時空復雜度的代碼是否正確,但是可以寫出來一個復雜度爆炸但是絕對正確的暴力代碼,對拍程序可以實現生成若干隨機數據,然后比較兩個程序在隨機數據下是否輸出答案一致,常見于oi類比賽 |
hack | 有時候雖然寫了錯誤代碼,但是僥幸通過了所有測試點,但是其他選手可以自己造數據來讓你的代碼無法通過題目,同時也是cf的特性之一 |
fst | failed system testing,cf的大多數比賽在賽時只評測一小部分的測試點,在賽后會統一評測所有的測試點,所以會有賽時通過了題目賽后發現其實沒過的情況,這就稱為fst |
spj | special judge,題目的評測方式,例如有些題目必須輸出 YES 才能判斷為正確,而對于spj無論 YES yes yEs 等都可以判斷為正確,如果題目是spj的話一般會在題目的輸出格式中說明 |
ak | 表示這場比賽的所有題目全部拿到滿分 |
rp++ | 人品加一,用于表示祝福 |
bx | 拜謝 |
orz/or2 | orz看起來像一個人認輸跪倒在地,or2的屁股更翹 |
tql | 太強了 |
%/膜 | 膜拜 |
淺談XCPC
icpc和ccpc
比賽流程
比賽流程(以2024年上海區域賽為例)
不過最近開始出現熱身賽和正式賽在同一天的情況了(以2025年南昌邀請賽為例)
比賽規則
(以2025年南昌邀請賽為例)第二條根據參賽隊伍數量的不同而不同,但是獲獎比例固定不變
比賽場地
一般是體育館,如果特殊情況(主辦方經費不足/參賽人數過多)會考慮選擇機房,如果遺憾在機房參賽也希望大家可以給主辦方諒解,因為舉辦比賽是非常不容易的事情
比賽語言
自2023年南京區域賽首次選擇中文題面后,大多數的icpc和ccpc競賽都開始為選手提供中文題面(在這之前全英文題面),當然如果是海外供題的話還是會只有英文題面就是了
比賽贈品
一般主辦學校會為所有選手(包括打星隊伍)提供免費的餐券和賽時午飯,也會為選手提供伴手禮(質量跟報名費有關系)
主辦方
實際上舉辦一場xcpc大概率是會虧本的,而且舉辦xcpc十分消耗人力物力,所以希望大家可以給主辦方盡可能地諒解
賽時
一般一場比賽有13道題目,如果你是全場第一個AC一道題目的話還會額外獲得首殺獎勵
xcpc還是相對寬松的,你可以帶任意的書籍和紙質資料(當然電子類的資料是肯定不行的),也可以自己帶飯零食什么的
在賽時因為是三個人只有一臺機子,所以你可以選擇先讓志愿者幫忙打印出來代碼去一旁想題
賽制
oi賽制
只能提交一次,賽后自動提交代價,可以獲得部分分(即一道題滿分一百,可以獲得十分二十分的部分分),賽時無排名
應用比賽:csp-j/s,noi,藍橋杯
acm賽制
可以無限次提交,以最后一次提交為準,但是每道題要么零分要么滿分,無部分分得分,賽時有排名,如果得分相同,會根據罰時來進行升序排序。不過具體情況具體分析,例如codeforces中,每次提交錯誤/重復提交會扣掉一定的分數;在xcpc賽事中,每次提交錯誤會增加20分鐘的罰時
應用比賽:icpc,ccpc,百度之星
ioi賽制
可以無限次提交,并且可以獲得部分分,多次提交并不會有任何懲罰,分數以最后一次提交/最高分最準,最舒服的一個賽制
應用比賽:ioi,睿抗,天梯賽
多校
一般是指牛客多校和杭電多校
牛客多校
牛客暑期多校是面向準備參加ICPC/CCPC等算法競賽選手的暑期訓練營。內容包括10場線上比賽,賽后直播講題以及社群交流學習。歷年出題人包括NOI、IOI、ICPC world final 等頂級賽事的金牌選手。 旨在通過比賽、講解、交流來提升同學們的編程能力,為下半年的比賽備戰。并促進各高校集訓隊之間的學習和交流。
具體可看2025年暑假多校比賽頁面:2025牛客暑期多校訓練營1
另外因為之前多校有很多英文題,推薦使用這個插件來進行翻譯:Nowcoder Better
杭電多校
杭電多校是杭州電子科技大學在杭電oj舉辦的多校聯賽,不過我沒打過杭電多校,具體可以直接去官網看看:https://acm.hdu.edu.cn/
正式隊/打星隊
正式隊就是普通參賽隊伍,在得到一定名次后可以獲得對應的獎項
打星隊比較特殊,簡單來說是只參加比賽不參與評獎,所以可以讓中小學生參與xcpc,或者是社會人士,或者跨校組隊
正式隊員的要求如下(以2024年ICPC杭州站為例)
省賽/邀請賽/區域賽
從含金量上說一般省賽 < 邀請賽 <<< 區域賽
當然也有例外,比如北京省賽的難度就非常非常高,含金量也會相應提高
省賽
名額一般是一個學校最高10/7個,幾乎是點擊就有,并且只能本省高校可以正是參賽,其余省份只能打星參與
如果省賽舉辦學校舉辦區域賽的話,也許會根據省賽成績發放區域賽名額
邀請賽
全國高校都可以正式參賽,但是名額分配需要根據主辦方的不同分配方式也不同,例如2025年西安邀請賽名額全根據報名順序來發送,2025年南昌邀請賽會優先每學校至少一個名額來發送
因為想要參賽的隊伍數量是遠遠超出賽場的容量的,所以名額非常寶貴
如果邀請賽賽舉辦學校舉辦區域賽的話,也許會根據省賽成績發放區域賽名額
區域賽
區域賽之前會有網絡賽,網路賽的成績與名額關聯度非常高,一般是icpc兩場網絡賽,ccpc一場網絡賽。事實上網絡賽打出來名額要比區域賽獲獎難
這也是絕大多數選手最關鍵的比賽,大家說的acm金銀銅牌/xcpc金銀銅牌一般是默認說的是區域賽
名額分配
(以2024年上海站為例)
報名流程
(以2024年ICPC杭州站為例)
外卡
如果很遺憾網絡賽失利,但這并不意味著你完全與區域賽無緣,一般來說每個主辦方會有一些額外名額,這個額外名額就是外卡,如果你的理由能夠足夠打動主辦方是可以獲得外卡的。值得一提的是,如果是學校首次參加ccpc,那么大概率會獲得一個ccpc區域賽外卡
競賽相關網站
網站 | 簡介 |
---|---|
codeforces.com/contests | 全球最活躍的算法競賽平臺 Codeforces 的比賽入口,實時榜單與互動社區一站齊全,簡稱cf。 |
cftracker.netlify.app/contests | Codeforces?已經舉辦過的比賽可視化追蹤器,可以直觀地看到自己做過哪些題與題目對應的難度。 |
luogu.com.cn | 國內大型 OI/XCPC 社區與題庫,支持同步多平臺題目與刷題統計,配有高質量文章區。 |
atcoder.jp/contests | 日本?AtCoder?官方比賽列表,每周六/日會有ABC, ARC等。 |
kenkoooo.com/atcoder#/table | AtCoder 題目難度與個人進度可視化工具,可以直觀地看到自己做過哪些題與題目對應的難度。 |
oj.daimayuan.top/courses | 代碼源 OJ 的系統化課程+評測,適合配套課程學習。 |
ac.nowcoder.com/acm/contest/vip-index | 牛客網競賽中心,提供每周有周賽/月賽/練習賽/挑戰賽,假期會有寒假訓練營與暑假多校。 |
qoj.ac | QOJ 在線評測平臺,匯集多校訓練題與自定義題單,支持 SPJ。 |
ucup.ac/zh | UOJ 團隊新平臺?Ucup,很多XCPC的比賽都可以在這里參加。 |
leetcode.cn | 力扣中國站,面向面試算法題練習與周賽活動的主流平臺。 |
vjudge.net | VJudge 虛擬判題系統,一站式提交多 OJ 題并可自建比賽,題庫非常全。 |
acm.hdu.edu.cn | 杭電 OJ,老牌中文評測系統,題量豐富且經典,假期里會有杭電多校。 |
clist.by | Clist 全網競賽日歷,集中查看各大 OJ 比賽時間并可設置提醒,也可以用于查看比賽題目的難度。 |
oiwiki.org | OI Wiki 知識庫,整理算法與數據結構入門到提高的中文資料。 |
icpc.global | ICPC 國際大學生程序設計競賽官網,用于報名ICPC的比賽。 |
acmer.info | ACMer?Info 聚合站,提供算法競賽相關的信息與推薦群聊。 |
代碼工具
實際上算法競賽中對工具的要求極低,甚至一些網頁的代碼運行都足夠了
小熊貓dev C++
如果是剛剛入門的選手那么我推薦你安裝個小熊貓dev C++就夠了,因為它的安裝與運行十分簡單
下載鏈接:小熊貓dev C++
下載完成后點擊安裝,所有過程無腦下一步即可
這里可以進行主題設置,我這里改了個自己喜歡的字體
安裝完成后使用 ctrl + n
新建文件
寫好代碼后按 F11
便可以實現編譯運行代碼
vscode
如果你覺得dev已經無法滿足你了,你需要更方便的插件/功能,你可以考慮vscode,具體教程可以見我之前的文章
【競賽工具】——vscode xcpc競賽向配置教程
sublime text4
sublime同樣是輕量級的代碼編輯器,并且也可以安裝很多實用的插件,具體教程可以見我之前的文章
【競賽工具】——sublime text4 xcpc競賽向配置教程
clion
這個是我自己一直在用的IDE,現在好像也可以免費使用了,不過比較重量級,打開ide和運行代碼要費一些時間,其他很完美,可以直接在官網下載
https://www.jetbrains.com/clion/
推薦的訓練方法
總結為一句話:大量的去刷難度略高于自己能力的題目
刷題
下面會有非常詳細的cf應用教程,當然還有牛客洛谷等網站也非常推薦去做題,不過現在時間有限(明天要去外地打比賽)就先只寫cf的應用教程(因為是英文網站所以比較難懂,而牛客洛谷等主語言就是中文就非常友好),當然還有atcoder,這里由于時間原因也先暫時不寫(如果有第二版的話會補上)
codeforces的題目偏向于思維,atcoder的題目偏向于典題,我個人是覺得剛入門的話只需要做到大量刷題即可,最好的話是去刷高于自己當前最大rating + 300難度的題目
非常推薦使用cftracker和atcoder problems這兩個東西來做題
關于做自己最高分數+300的題目可以這樣
codeforces
推薦插件:codeforces better
另外還有carrot,這個插件要在chrome的應用商店下載,這個插件可以賽時查看自己的表現分(自己當時的排名對標cf的多少rating)
接下來說明下codeforces最常用的幾個情況,這里挑最關鍵的幾個講
home
contests
這里額外說一點,cf常見的比賽分為div1,div2,div3,div4, edu
類別 | 計分區域 | 備注 |
---|---|---|
div1 | 1900+ | 難度最高,一般A題是div2的C題 |
div2 | 如果同時舉辦div1: [0, 1900),如果單獨舉辦div2:[0, 2100) | 最常舉辦的比賽 |
div3 | [0, 1600) | |
div4 | [0, 1400) | 最簡單的比賽 |
edu | [0, 2100),一般對標div2 | 會出很多典題,比較教育選手 |
div1 + div2 | all |
contest
隨意點進一個比賽中,這里也有很多頁面,我們挨個兒說
gym
很多xcpc類的比賽可以在cf上vp,也就是在gym上找到相應的比賽去做
關于xcpc比賽還有牛客,洛谷,qoj,uccup等網站都會有比賽,因為有些比賽只會出現在某一個平臺,想vp的話可以直接問群友在哪
problems
板刷cf一般就是指從這里篩選難度區間后開始刷題
隨意點進一個題目的頁面是這樣的
個人主頁
順帶講一下cf的顏色分段
分段 | 段位 | 顏色 |
---|---|---|
[0, 1200) | newbie | 灰名 |
[1200, 1400) | pupil | 綠名 |
[1400, 1600) | specialist | 青名 |
[1600, 1900) | expert | 藍名 |
[1900, 2100) | candidate master | 紫名 |
[2100, 2300) | master | 橙名 |
[2300, 2400) | international master | 黃名 |
[2400, 2600) | grandmaster | 紅名 |
[2600, 3000) | international grandmaster | 紅名 |
[3000, 4000) | legendary grandmaster | 黑紅 |
4000+ | jiangly/tourist (以你的id命名!) | 紅黑 |
學習算法
算法學習我其實覺得在剛接觸算法競賽的時候不需要急著學算法,這個階段說不定會學到一大堆useless的算法,我覺得應該先大量刷題把算法思維訓練出來,差不多cf1600分的時候在學習算法效率會非常高
還有個名言: Stop learning useless algorithms, go and solve some problems, learn how to use binary search.(停止學習用不到的算法,去刷題,學習怎么用二分)——Um_nik
這里我推薦牛客的網課,牛客的算法課程質量是很高的。另外還有代碼源的課程,遺憾的是代碼源的課程已經下架買不到了
此外學習算法也不一定必須看課,看上幾篇博客再刷上幾道題也是完全沒問題的,可以在洛谷的題單中去搜索自己學習的算法,然后去刷題
刷題是非常重要的,一定要刷題!一定要刷題!一定要刷題!
學會交際
算法競賽的圈子其實很小,很多時候都是一群相同的人在不同群里聊天
在算法競賽中交際非常重要,自己寫一道題可能要研究兩三天(其實并不算罕見現象),而去向群友請教的話有可能一句話就能讓你開悟理解這道題的思想
也可以喊上幾個人一起vp,比自己單獨vp會更有意思
結尾
現在時間2025/5/16 23:45,明天還要趕飛機去打南昌站,就先寫這些,也許打完南昌回來會想到更多東西再開個第二版本
同時感謝萌新群的群友,有很多東西找群友討靈感才有方向的,在此拜謝了or2