🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付

突然ですが,高中生向け的程式設計比賽,日本資訊奧林匹克(以下稱為 JOI),您知道各都道府縣的參加人數差異有多大嗎?

下圖顯示了到 2020 年,各都道府縣在 JOI 的參加人數(取自這個頁面)。東京都的累計參加人數超過 2000 名,而大分縣在 2020 年之前卻沒有任何參加者的情況[^1]。

圖表

我在大學入學後,經常聽到朋友說:「我不知道有什麼資訊奧林匹克(JOI)或數學奧林匹克(JMO)之類的活動,如果早知道我會想參加......」。

許多學生尤其是在地方上,因為不知道 JOI 而無法獲得更大的幸福。我希望能讓這些學生了解這個世界,擴大人生的可能性......懷著這樣的願望,我從 2020 年開始逐漸展開活動。

活動情況

我雖然仍在途中,但截至 2025 年 12 月已獲得以下成果。


  • 在東京都立 A 高中的指導下,某位學生成為歐洲女子資訊奧林匹克的日本代表選手,並獲得銅牌 🎉
  • 在茨城縣教育委員會的程式設計專家培育計畫中指導的學生,進入茨城縣史上首次國際資訊奧林匹克日本代表選手的最終選拔 🎉
  • 在 2025 學年度,某些在大分縣立大分舞鶴高等學校指導的學生,突破了 10 名以上 JOI 初賽 🎉

成果報告

本文將回顧這些活動。

另外,我也會介紹在與學生互動中產生的「AtCoder 水色學習方法」。這種練習方法不僅適用於以 JOI 為目標的高中生,也對那些希望進入 IT 行業的學生或在 IT 行業中提升技能的社會人士有幫助。


0:資訊奧林匹克(JOI)是什麼

首先,我來簡單介紹一下什麼是 JOI。JOI 是針對高中生的「競技程式設計」(簡稱競程)比賽。而所謂的競技程式設計,簡單來說就是


使用程式設計,盡可能多地在限制時間內解決像謎題一樣的問題的運動


相信許多人都聽說過 AtCoder,AtCoder 是運營這項「競技程式設計」比賽的公司及網站。

JOI 成為了高中生們在競技程式設計世界中角逐的青春舞台。

JOI的流程

JOI 的流程如上圖所示。簡單來說,如果能夠突破 JOI 初賽,就需要具備與解 Fizz Buzz 類似水平的能力。在重視資訊科學教育的高中,這被視為顯示成果的到達指標之一,與基本資訊技術者資格的取得一起。

突破 JOI 的二次預賽,可以與參加全國高等學校體育大會相提並論。而從那以後,便需朝成為該領域的專業人士邁進。

1:至今的 JOI 普及活動

可能有些晚了,但我簡單自我介紹一下。

目前,我在NTT數理系統公司擔任顧問(負責公關)以及MONOGUSA公司的內容架構師(數學教材開發)。作為興趣,我參加競技程式設計及進行與其相關的種種活動(如下文所述)。

活動 ① :算法書籍的出版(2020年〜2022年)

任何事情都得有教材才行......因此,我在 Qiita 上撰寫了許多文章。

之後,受到講談社科學部的邀請進行書籍化,於 2020 年出版了我的著作《鍛鍊解決問題的能力!算法與資料結構》[^2]。果真,出版社的觸角非常敏銳。隨後我持續進行寫作,至今已出版了四本書。

書籍

透過這些寫作活動,我收到了像是「因為這篇文章開始了競程!」或「因為讀了這本書我才能成為工程師!」的許多感人的回饋。

隨著時間推移,我越來越覺得,透過寫作間接與讀者互動也可以,但我希望能更直接地通過競程與人交流!!

活動 ② :透過 TwitCasting 支援高中生(2020年)

因此,我利用配信應用程序 TwitCasting,創建了一個讓高中生追尋喜好事物的交流空間。特別是,我希望能讓那些「班上沒有能討論競程等話題的對象......」的地方高中生找到志同道合的夥伴,切磋琢磨,收穫成果,開創擴展世界的契機。

簡而言之,這項活動沒有很成功。要真正擴展高中生的世界,需要相當的時間和耐心去伴隨他們並取得一些成果。然而,在像 TwitCasting 這樣變化莫測的地方,將其具體化並不容易。

因此,我認為可以以「作為學校的努力」的形式,朝著 JOI 前進的方向發展。接下來,經過一段時間的摸索,我開始積極在 Facebook 上發佈資訊,並與全國的資訊教育工作者建立聯繫。

活動 ③ :在東京都立 A 高中的授課(2022年〜2025年)

雖然 TwitCasting 的活動本身沒有成功,但並非毫無收穫。其中一位在當時是聽眾的 一般社團法人 MiraPub 的運營人員 ideal(イデアル),幫我搭起了与東京都立 A 高中的 B 教師的聯繫。

於是,我在 2022 年 8 月首次上課。初期甚至只有一名學生,但到 2023 年增至 4 名,2024 年更是超過 10 名。

參與人數的增長,與最初與那位學生的相遇有著莫大的關聯。雖然他身體不是很好,經常有身體不適的困擾,但卻是一位勤奮努力的學生。此外,儘管他性格較內向,但熱心助人,積極介紹自己所參加的社團,並向朋友宣傳,默默支持團隊中的成員們[^3]。

最終,每位學生都能夠實現各自的目標,取得了不小的成果。具體的練習方法等在後文中提及。

在取得一定成果後,我也開始投入學術會議的發表。下圖是我在2024 年全國高中資訊教育研究會(愛知大會)上發表的海報[^4]。

學會發表

此外,學會發表果然是很棒的事情,並且會延續到後續的活動。與後文提到的來自大分縣立大分舞鶴高中的伊藤大貴老師的相遇,也是源於這類學會。

活動 ④ :競程支援網站 AtCoder NoviSteps 的個人開發(2023年〜)

當我想將東京都立 A 高中的做法擴展至全國時,我又再次感受到對教材的需求。活動 ① 中提到的我的著作,對於剛開始學習程式設計的學生來說,水平太高。此外,在東京都的學校,我可以每月輕鬆出訪,但在地方的學校卻無法這樣頻繁

因此,我與hiro、ウルズニャー、nonon、Blueberry 等志願者共同開發了名為 AtCoder NoviSteps 的網站,旨在讓學生能自律且高效地練習 AtCoder 的過去問題。

Qiita
已掌握的問題標示為綠色,想要複習的問題標示為藍色......等進行管理

在 AtCoder NoviSteps 中,針對競程中出題的問題所需的算法素養,我們依據「NoviSteps 等級標準」將其劃分為 17 嚴重等級(10Q, 9Q, 8Q, ..., 2Q, 1Q, 1D, 2D, ..., 7D)。例如,下表定義了 7Q 等級應學習的內容。

NoviSteps 等級標準

此 NoviSteps 等級標準被應用於:

  • 茨城縣教育委員會的程式設計專家培育計畫初級課程的設計
  • AtCoder 公司的問題的絕對評價及題目的自動化研發

等方面。NoviSteps 根據這個等級標準提供了能夠集中學習必要素養的練習題集。透過依序解答這些問題,可以順利提升技能。

活動 ⑤ :茨城縣程式設計專家培育計畫(2024年〜)

茨城縣教育委員會非常重視教育,自 30 年度以來,為了培養全國頂尖的程式設計能力的中學生和高中生,開展了程式設計專家培育計畫

目前已分為「遊戲・應用程式開發課程」、「AI 程式設計課程」、「競技程式設計課程」,去年和今年我擔任了競技程式設計課程的講師。

這裡的學生們彼此之間關係很好,每次都會進行活躍的討論。最終,學生之間的活躍交流才能真正拓展才能,這是我深有感觸的。我們的工作就是建立這樣的氛圍。

活動 ⑥ :支援大分縣立大分舞鶴高等學校科學部資訊班的活動(2024〜2025年)

大分縣在 JOI 的普及過程中最為遲緩。自 2005 年現行 JOI 開始以來,直到 2020 年竟然沒有一位參加者出現。

在這樣的情況下,真是幸運,通過學會與大分縣立大分舞鶴高中的伊藤大貴老師(當時)相遇,得到了指導 JOI 的機會。伊藤老師在該校新設立了科學部資訊班,招募學生,並創建了一個積極展開各種活動的環境[^5]。我則負責與 JOI 相關的部分。

大分舞鶴高等學校

我個人的挑戰點在於,因為遠距離的原因,我與學生們的接觸次數有限,究竟能做到什麼程度......這是我在思考的問題。儘管我開發了 AtCoder NoviSteps,希望能幫助學生獨立學習,但實際效果卻讓我充滿期待與不安。

這所高校的科學部資訊班的特點在於,學生們非常陽光活潑,真的很享受討論。此外,有的學生因為對數學特別感興趣而加入,也有因對網頁開發等領域的興趣而入部的學生。背景和興趣各異的學生聚在一起,彼此交流的環境極為珍貴。透過相互感受到「擁有對方所缺少的東西」,獲取強大的刺激

學生之間的互相學習效果驚人。我一直認為,「在達到一定水平後,學生可以自主學習,但在學習 Fizz Buzz 等基本問題的過程中,可能需要手把手的輔導......」。然而,大分舞鶴的學生們卻超出了我的預期。

最終,經歷了 2005 至 2023 年 JOI 參加者僅有 8 名的大分縣,2024 年這所學校卻成功培養出超過 10 名 JOI 初賽突破者 🎉

2: AtCoder 水色的學習方法

在與許多學生互動的過程中,我發現了一些競程的學習方法。

這裡,我假設高中入學時完全沒有程式設計經驗的初學者,目標是在高二的冬季比賽中突破 JOI 二次預賽(進入半決賽階段)

在高中資訊科教師之間,通常認為突破一次預賽相對容易,但二次預賽則頗具挑戰性。然而,只要能夠確保足夠的練習時間,我相信每所學校都能有約 2〜3 名學生達成此目標。

此外,在 2024/2025 年度的大會中,JOI 二次預賽的突破標準相當於 AtCoder 綠色至水色(下圖的 C 到 B 級別)。

評分

以下將分幾個階段來介紹。下表中的「等級」是指「NoviSteps 等級標準」,而「評分」是指 AtCoder 的評分。

練習等級 到達目標 到達評分(基準) JOI 目標成果 參與期間(基準)
階段 ① 10Q 〜 7Q 掌握程式設計的素養,能夠順利撰寫 Fizz Buzz R100 突破 JOI 初賽 高一的 4 月 〜 5 月
階段 ② 6Q 〜 5Q 能夠順利實現基於全探索的解法,或者正確預測計算時間 R200 高一的 6 月
階段 ③ 5Q 〜 4Q 學習逐步減少計算量的技巧,如二分搜尋、累積和。並熟練於高中數學,能夠解決需要數學思考的問題 R300 高一的 7 月 〜 10 月
階段 ④ 3Q 學習 DFS、BFS、UnionFind 等典型的算法與資料結構 R500 高一的 11 月 〜 3 月
階段 ⑤ 2Q 解決大量問題,以應用階段 IV 學到的算法 R800 高二的 4 月 〜 6 月
階段 ⑥ 1Q 〜 1D 解決更多問題,能夠解決實用的頂尖演算法問題 R1200 突破 JOI 二次預賽 高二的 7 月 〜 12 月

階段 ①(目標 R100, 7Q):適應程式設計

階段 ① 的目標是在學習程式設計語言的同時,對程式設計有所適應。具體來說,目標是能夠順利解決 Fizz Buzz 程度的問題。若能達到這個目標,就能突破 JOI 的初賽。

① - 1:註冊 AtCoder

開始競技程式設計的首要步驟是先註冊 AtCoder。註冊方法及 AtCoder 的使用方式,可參考以下文章。

AtCoder 每週六 21:00 舉行面向初學者的 AtCoder Beginner Contest(ABC)。截至 2025 年,這類比賽的過去問題已超過 7000 題。透過解決這些問題將大大提升實力。

此外,每週參加 ABC 的比賽對 JOI 練習也大有幫助。若每週都參加,則兩年內就能累積 100 次實戰練習

比賽列表

(AtCoder 的 比賽列表頁面

① - 2:學習程式設計語言(特別是 C++)

首先,您需要學習程式設計語言的文法。許多人在選擇語言時感到困惑,但在 JOI 中,特別建議使用 C++,理由如下。


  • 在 JOI 的二次預賽之前可以使用其他語言,但 JOI 半決賽階段後事實上只能使用 C++[^6]
  • 與競程有關的許多書籍和資料中的程式碼多是用 C++ 編寫
  • 即使實現正確的解法,若使用 Python,亦可能因為超過執行時間限制而無法通過

學習程式設計語言的方法多種多樣,但 AtCoder 提供了一本「針對競技程式設計而設計的 C++ 入門教材」APG4b。如果沒有特別的偏好,學習 APG4b 是個不錯的選擇。

  • [C++

原文出處:https://qiita.com/drken/items/c853184ad95b9e9fd45d


精選技術文章翻譯,幫助開發者持續吸收新知。

共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。
🏆 本月排行榜
🥇
站長阿川
📝15   💬3   ❤️3
317
🥈
我愛JS
📝1   💬3   ❤️2
45
評分標準:發文×10 + 留言×3 + 獲讚×5 + 點讚×1 + 瀏覽數÷10
本數據每小時更新一次
🔧 阿川の電商水電行
Shopify 顧問、維護與客製化
💡
小任務 / 單次支援方案
單次處理 Shopify 修正/微調
⭐️
維護方案
每月 Shopify 技術支援 + 小修改 + 諮詢
🚀
專案建置
Shopify 功能導入、培訓 + 分階段交付