吉林大學(xué)趙星宇:從零基礎(chǔ)到圓夢金獎(jiǎng)——我的CCSP競賽之旅與成長心得 | CCSP金獎(jiǎng)?wù)f
吉林大學(xué)趙星宇在2024 CCF CCSP競賽中獲得金獎(jiǎng),每年CSP高分考生(200分及以上)均可報(bào)名參加CCSP競賽。第36次CSP認(rèn)證考試將于12月8日舉辦,報(bào)名正在進(jìn)行中。CCF不定期邀請(qǐng)CSP高分和CCSP獲獎(jiǎng)選手分享經(jīng)驗(yàn),希望能夠幫助同學(xué)們?nèi)〉酶蟮倪M(jìn)步。
非常歡迎更多CSP優(yōu)秀學(xué)子分享自己的寶貴經(jīng)驗(yàn),聯(lián)系:csp@ccf.org.cn
一、CCSP:結(jié)識(shí)、發(fā)展、熱愛
早在去年,我就從同學(xué)那里知曉了CCSP競賽。但那時(shí)候的我,并不具備優(yōu)秀的編程能力,也未達(dá)到參賽門檻(CCF CSP認(rèn)證200分及以上)。而在今年,當(dāng)我披荊斬棘獲得諸多獎(jiǎng)項(xiàng)后,偶然間打算整理一下過去的信息,卻命中注定般地瞥見一條QQ對(duì)話:“你想?yún)⒓覥CSP嗎?”……緣分的糾纏使我有面對(duì)過去弱小自己的勇氣,也有了彌補(bǔ)遺憾的機(jī)會(huì)。
經(jīng)我了解,CCSP是持續(xù)十二小時(shí)的競賽。在這之前,我從來沒有了解過類似的賽制,因此我知道這次CCSP之旅必定是不可多得的珍貴體驗(yàn)。事實(shí)也確實(shí)如此,在我報(bào)名后,我翻閱了CCSP往年的題目,在感受精妙的題目設(shè)定的同時(shí),也逐步適應(yīng)了新的賽制。與同學(xué)們的交流切磋,與老師的溝通,使我更有信心在接下來的競賽中取得理想的成績。
在正式的參賽結(jié)束之后,雖然歷經(jīng)了十二小時(shí)的你追我趕,但我并不覺得疲憊??粗薮蟮倪壿嬀W(wǎng)絡(luò)在自己手中解析為條條代碼,我感受到了從其他賽制不能體驗(yàn)到的欣悅與樂趣。
二、CCSP2024賽場體驗(yàn)與經(jīng)驗(yàn)
CCSP作為“計(jì)算機(jī)系統(tǒng)與程序設(shè)計(jì)競賽”,與傳統(tǒng)程序設(shè)計(jì)競賽存在顯著差異。盡管競賽僅設(shè)有五道題目,但其持續(xù)時(shí)間長達(dá)12小時(shí)。通常情況下,競賽內(nèi)容包括一道簽到題、兩道傳統(tǒng)程序設(shè)計(jì)題以及兩道系統(tǒng)實(shí)現(xiàn)題。
在賽制方面,CCSP采用IOI賽制,參賽者為單人形式,提供充足的提交次數(shù),參賽者可即時(shí)查看評(píng)測結(jié)果,并設(shè)有部分分?jǐn)?shù)的評(píng)定。此外,錯(cuò)誤提交不受任何懲罰。
由于除簽到題外的其他題目,特別是系統(tǒng)實(shí)現(xiàn)題,其代碼實(shí)現(xiàn)極為繁瑣復(fù)雜,通常需要300行以上的代碼(比較困難的題目,如CCSP2023的“簡易類型系統(tǒng)”甚至需要上千行才能完成)。因此,選擇合適的編碼工具將顯著提升編程效率和調(diào)試速度。在CCSP提供的編程工具中,我個(gè)人認(rèn)為最好用的是VSCode。
圖為CCSP2024提供的競賽環(huán)境(很可惜沒有神器CLion)
由于CCSP允許攜帶電子資料,可提前準(zhǔn)備好VSCode的配置文件,以便使用VSCode的調(diào)試功能。
在比賽期間,參賽者在完成簽到題后,可以先對(duì)所有題目進(jìn)行初步瀏覽,從而選擇自己具有思路或擅長的題目進(jìn)行解答。在比賽進(jìn)行一段時(shí)間后,建議關(guān)注排行榜,優(yōu)先處理那些通過人數(shù)和得分率較高的題目。對(duì)于傳統(tǒng)程序設(shè)計(jì)題目,當(dāng)思路不明確時(shí),可以考慮先通過暴力算法獲取部分分?jǐn)?shù),隨后再思考如何應(yīng)對(duì)更大的數(shù)據(jù)范圍的挑戰(zhàn)。對(duì)于系統(tǒng)實(shí)現(xiàn)類題目,這類題目通常不依賴復(fù)雜算法,但其題面往往較為復(fù)雜且代碼較長,因此建議為每道題目預(yù)留至少3到4小時(shí),以便于閱讀題目、編寫代碼及進(jìn)行調(diào)試等工作。
在CCSP2024中,我在通過簽到題后,兩道傳統(tǒng)題均沒有太好的思路,因此在打了60分的暴力分后,我決定優(yōu)先解決其中一道系統(tǒng)實(shí)現(xiàn)題,最終拿到了該題的一血。
CCSP頒獎(jiǎng)典禮現(xiàn)場賽題分析
在通過此題后,我有了前面一道傳統(tǒng)題的思路,也順利通過了這道題,然后開始集中精力攻克另一道系統(tǒng)實(shí)現(xiàn)題,比賽結(jié)束時(shí)得分為100+100+60+100+80=440,獲得金獎(jiǎng)第14名。
CCSP頒獎(jiǎng)典禮現(xiàn)場合影
三、備考建議
首先,編程與算法的基礎(chǔ)知識(shí)是在程序設(shè)計(jì)競賽中取得優(yōu)異成績的基石。推薦在洛谷、Codeforces等平臺(tái)進(jìn)行練習(xí)。洛谷提供了豐富的模板題目與經(jīng)典題目,借助這些題目可以學(xué)習(xí)基礎(chǔ)算法并快速掌握常見的解題思路;而Codeforces上的競賽則適合進(jìn)行Ad-hoc類題目的訓(xùn)練。此外,Codeforces設(shè)有評(píng)級(jí)系統(tǒng),使選手能夠?qū)ψ陨韺?shí)力有更清晰的認(rèn)識(shí)。若能達(dá)到1900以上的分數(shù)(Candidate Master),則表明已具備相當(dāng)?shù)木幊棠芰Α?/span>
其次,掌握熟練的代碼調(diào)試能力可以讓我們?cè)诰幊虝r(shí)事半功倍。在CCSP中,所涉及的代碼通常具有相當(dāng)?shù)膹?fù)雜性和繁瑣性,因此,編寫出bug幾乎是不可避免的。在這種情況下,能夠熟練地運(yùn)用各種調(diào)試工具將顯著提高調(diào)試的效率和速度。許多參賽者往往僅限于使用“輸出中間變量調(diào)試法”來查找問題,然而在許多特定的場景中,使用調(diào)試器(debugger)進(jìn)行調(diào)試不僅能夠提供更高的準(zhǔn)確性,還能有效地加快問題的定位和解決過程。因此,提升調(diào)試技能,特別是對(duì)調(diào)試工具的熟練使用,將極大地增強(qiáng)在競賽中的競爭力。我們?cè)谄綍r(shí)訓(xùn)練時(shí),可以放棄Dev-C++、Code::Blocks等傳統(tǒng)IDE,轉(zhuǎn)而使用CLion、Visual Studio等現(xiàn)代化工具。這些工具不僅擁有更優(yōu)秀的代碼提示、更便捷的代碼補(bǔ)全、更智能的格式調(diào)整、更好用的調(diào)試器,還能在程序出現(xiàn)“RE”(Runtime Error,運(yùn)行時(shí)錯(cuò)誤)時(shí),快速定位到代碼中導(dǎo)致程序出現(xiàn)RE的位置,而傳統(tǒng)的工具只會(huì)提示程序崩潰退出,不能做到快速查錯(cuò)。
最后,要擁有冷靜的思維和平和的心態(tài)。這不僅是個(gè)人能力的體現(xiàn),更是參與程序設(shè)計(jì)競賽所必需的重要素質(zhì)。能夠站在這個(gè)充滿挑戰(zhàn)和競爭的賽場上,我們已經(jīng)在眾多同齡人中脫穎而出,成為最優(yōu)秀的一批。這樣的成就不僅源于我們的知識(shí)儲(chǔ)備和技術(shù)水平,更是我們?cè)诿鎸?duì)壓力和挑戰(zhàn)時(shí),能夠保持理智和冷靜的思考能力所帶來的結(jié)果。在競爭激烈的環(huán)境中,能夠以平和的心態(tài)應(yīng)對(duì)各種復(fù)雜問題,將使我們更具優(yōu)勢,進(jìn)一步提升我們的表現(xiàn)。
四、結(jié)語
在參與CCSP競賽的過程中,我獲得了許多寶貴的知識(shí)和經(jīng)驗(yàn)。通過這次競賽,我不僅提升了自己的專業(yè)技能,還拓寬了視野。對(duì)此,我要衷心感謝CCF為我們提供這樣一個(gè)優(yōu)秀的比賽平臺(tái),讓我們能夠展示自己的才華、交流思想、互相學(xué)習(xí)。同時(shí),我也衷心祝愿CCSP競賽在未來能夠越辦越好,吸引更多的參與者,共同推動(dòng)計(jì)算機(jī)科學(xué)領(lǐng)域的發(fā)展與創(chuàng)新。