JOI 2026/2027 一次予選(第1回)をプログラミング塾講師が振り返る|参加者数・得点分布・各問題の感想
2026-10-04
代表講師 / カリキュラム監修
星出 遼汰郎(ほっしー)
中学生・高校生向けのプログラミング学習サービス「HaruCoder」を運営しています。指導歴は5年以上、これまでに100人以上の生徒を教えてきました。プログラミングの楽しさ、そして「考えることそのものの楽しさ」を伝えることを大切にしています。
2026年9月12日(土)に、第26回日本情報オリンピック(JOI 2026/2027)の一次予選 第1回が行われました。 9月23日には公式から問題文・解説・解答例・統計情報が公開されています。
僕は普段、HaruCoder で中学生・高校生に JOI 対策を教えています。毎年この時期は、生徒と一緒に一次予選の問題を解き直して振り返るのが恒例です。
結論から言うと、今年の第1回は例年より難しい回でした。 特に、基本問題の最後にあたる C問題が大きな壁 になりました。最後の F問題は、アルゴリズムの考察が必要な二次予選並みの問題 でした。
この記事では、まず公式の統計からその根拠を確認し、そのあと各問題を講師の目線で振り返ります。最後に、第2回(10月25日)に向けて何をすればいいかをまとめます。
「そもそもJOIって何?」という方は、先に情報オリンピック(JOI)とは?をご覧ください。
今年からの新しい形式(6問・600点満点、300点で予選Bランク、500点で二次予選進出)については、情報オリンピック(JOI)の難易度を完全解説で詳しく説明しています。
参加者数と得点分布から見る「難しさ」
第1回の参加者は 1,621人 でした(応募資格を満たし、競技時間内に1回以上提出した人の数)。 得点分布は次のとおりです。
| 得点 | 人数 | 累計 | 累計の割合 |
|---|---|---|---|
| 600点 | 138人 | 138人 | 8.5% |
| 500〜599点 | 187人 | 325人 | 20.0% |
| 400〜499点 | 189人 | 514人 | 31.7% |
| 300〜399点 | 218人 | 732人 | 45.2% |
| 200〜299点 | 372人 | 1,104人 | 68.1% |
| 100〜199点 | 296人 | 1,400人 | 86.4% |
| 1〜99点 | 0人 | 1,400人 | 86.4% |
| 0点 | 221人 | 1,621人 | 100% |
※ 二次予選進出などの判定は加点後の成績で行われるため、この表の人数がそのまま進出者数になるわけではありません。
予選Bランクに届いた人は、昨年の63.5%から45.2%へ
昨年(JOI 2025/2026)の第1回と比べてみます。
| 昨年 第1回(4問) | 今年 第1回(6問) | |
|---|---|---|
| 参加者数 | 1,658人 | 1,621人 |
| 予選Bランク | 1,053人(63.5%) | 732人(45.2%) |
参加者数はほぼ同じなのに、予選Bランクに届いた人の割合は約18ポイントも下がっています。
「形式が変わったのだから当然では?」と思うかもしれません。ですが、公式の発表では、今年の前半3問(A〜C問題)は昨年までの前半3問と同程度の難易度とされています。前半3問をすべて解けば300点でBランクなので、基準そのものは昨年の「4問中3問正解」と大きくは変わっていない はずです。それでもここまで割合が下がったのは、問題そのものが例年より難しかったからだと考えています。
もう一つ目立つのが、いちばん人数が多いのが200点台(372人) だということです。2問は解けたけれど、あと1問が取れずにBランクを逃した人がこれだけいます。この「あと1問」がどこだったのかは、問題ごとの結果を見るとはっきりします。
問題ごとの結果
| 問題 | 題名 | 区分 | 平均点 | 満点者 | 満点率 |
|---|---|---|---|---|---|
| A問題 | ノート | 基本 | 86.1点 | 1,395人 | 86.1% |
| B問題 | 最小除外値 | 基本 | 67.6点 | 1,096人 | 67.6% |
| C問題 | スポーツ大会 | 基本 | 36.9点 | 598人 | 36.9% |
| D問題 | 倍数ペア | 応用 | 39.0点 | 633人 | 39.0% |
| E問題 | JOIブロック | 応用 | 22.6点 | 351人 | 21.7% |
| F問題 | お菓子配り | 応用 | 9.6点 | 140人 | 8.6% |
A〜D問題は小課題が1つだけで、点数は0点か100点のどちらかです。部分点がついたのはE問題とF問題だけでした。
C問題が大きな壁になった
この表でいちばん目を引くのは、基本問題のC問題より、応用問題のD問題のほうが満点者が多い ことです。
昨年の第1回と、A〜D問題の満点率を並べてみるとさらにはっきりします。
| 昨年 第1回 | 今年 第1回 | |
|---|---|---|
| A問題 | 84.7% | 86.1% |
| B問題 | 81.2% | 67.6% |
| C問題 | 63.9% | 36.9% |
| D問題 | 32.0% | 39.0% |
A問題とD問題は昨年とほぼ同じか、むしろ上がっています。一方で C問題は約27ポイントも下がりました。原因は例年通りの「言われたとおりに実装する基本問題」ではなく、「考察が必要な応用問題」だったことです。詳しくは「各問題の振り返り」をご参照ください。
F問題はアルゴリズムの考察が必要だった
もう一つの山場がF問題です。満点は140人(8.6%)、平均点は9.6点でした。
| F問題の得点 | 人数 |
|---|---|
| 100点 | 140人 |
| 20〜79点 | 16人 |
| 1〜19点 | 97人 |
| 0点 | 1,368人 |
E問題まで満点獲得できれば二次予選に出場できるという性質上、F問題は「すでに二次予選出場が決まった子たち向けの問題」となるので、難易度が跳ね上がります。 当塾からは今年18人の生徒がJOIに挑戦しましたが、F問題の満点までたどり着いたのはたったの一人でした。
各問題の振り返り(講師の目線で)
各問題について、内容と「生徒がつまずきやすいところ」をまとめます。問題文はAtCoderの過去問ページで実際に提出して試せるので、ぜひ解いてみてください。
A問題「ノート」
A冊セットのノートがB組と、単品のノートがC冊あるとき、ノートが全部で何冊あるかを求める問題です。A × B + C を計算して出力すれば正解です。
講師の目線: 変数・四則演算・入出力ができれば解ける、例年どおりの1問目です。 それでも満点率は86.1%で、参加者の7人に1人は解けていません。原因の多くは、問題を解く力というより、「入力の受け取り方が分からない」「提出言語を間違える」といった 本番の環境に慣れていないこと だと思います。 本番前に一度は練習問題で提出まで通しておくだけで防げるので、ここは確実に取りたいところです。
- 問題文(AtCoder)/問題文(公式)/解説/解答例(C++・Python)
B問題「最小除外値」
0以上の整数AとBが与えられ、AでもBでもない0以上の整数のうち最小のものを求める問題です。答えは0・1・2のどれかなので、条件分岐で場合分けすれば解けます。
講師の目線: おちついて対処すれば難しい問題ではありませんが、沼にハマるとなかなか抜け出せない問題です。一見複雑そうな問題ですが、よくよく整理すると「答えは0,1,2のどれかになる」ということに気付けると思います。あとは単純なif,else ifの条件分岐ですね。 こういう問題では、入力例を自分の手で追ってみる ことが大切です。「0と4なら答えはなにかな?」「1と0なら?」と具体例をいくつか書き出すと、答えが0・1・2しかないことに気づくでしょう。 問題文の言葉が難しそうでも、具体例に落とせば解ける。これは授業でも繰り返し伝えていることです。
- 問題文(AtCoder)/問題文(公式)/解説/解答例(C++・Python)
C問題「スポーツ大会」
32チームが参加するトーナメント(全5ラウンド)で、準優勝するチームの番号を求める問題です。試合では強さが大きいほうが必ず勝ちます。
講師の目線: 今回いちばん差がついた問題です。 問題文を素直に読むと、「1ラウンドずつ試合をして、勝ったチームを並べ直して、また試合をして……」と全ラウンドを再現したくなります。もちろんそれでも解けますが、配列の詰め直しや番号の管理で混乱しやすく、80分の本番で書き切るのは意外と大変です。
トーナメント表の性質に注意して一歩引いて考えると、決勝で戦うのは「チーム1〜16の中で最も強いチーム」と「チーム17〜32の中で最も強いチーム」 となることがわかります。この2チームのうち弱いほうが準優勝なので、繰り返しで最大値を2回求めるだけで解けます。
この問題で問われていたのは、「書き始める前に、答えがどう決まるかを考える」 力です。プログラミングを始めたばかりの生徒ほど、問題文を読んだらすぐに書き始めます。でも、紙に小さいトーナメント表(4チームや8チーム)を書いて「決勝に残るのはどんなチームか」を考えてみると、ずっと簡単な問題に変わります。 講師としては、新形式の「基本問題」にこういう考える力を見る問題が入ってきたことに、出題側のはっきりした意図を感じました。
- 問題文(AtCoder)/問題文(公式)/解説/解答例(C++・Python)
D問題「倍数ペア」
長さNの数列Aについて、i < j かつ A_i が A_j の倍数になっている組 (i, j) の個数を数える問題です。N ≦ 1,000なので、二重ループですべての組を調べれば間に合います。
講師の目線: 区分は応用問題ですが、中身は昨年までのD問題と同じ「配列+二重ループ」の典型問題です。二重ループを練習してきた生徒にとっては、むしろC問題より取りやすかったと思います。満点者がC問題より多いのも納得です。
注意したいのは、「AがBの倍数」の向き です。A_i % A_j == 0 と A_j % A_i == 0 を取り違えると、入力例1で合わなくなります。入力例で答えが合わないときは、どちらの向きで割っているかを確かめましょう。
また、「i < j」の条件を、二重ループの範囲(j を i + 1 から始める)でそのまま表現できるかも、二重ループを使いこなせているかの分かれ目です。
- 問題文(AtCoder)/問題文(公式)/解説/解答例(C++・Python)
E問題「JOIブロック」
J・O・I・Gからなる文字列Sが、JOI・IOI・JOIG の3種類をつなげて作れるかを判定する問題です。Sの長さは最大100,000で、ここから部分点のある問題になります。
| 小課題 | 条件 | 配点 |
|---|---|---|
| 1 | SはOとIだけ | 20点 |
| 2 | SはJ・O・Iだけ | 20点 |
| 3 | Sの長さが20以下 | 20点 |
| 4 | 追加の制約なし | 40点 |
満点への道筋は、Sを先頭から順に読み、今の文字から始まる部品を当てはめていく 方法です。Iから始まるなら IOI しかありません。Jから始まるなら JOI か JOIG で、直後の文字がGかどうかで決まります。
講師の目線: 個人的には、C問題よりもこのE問題の方が簡単なんじゃないかと思っています。(それくらいC問題は難しかったんです!)
繰り返しの添え字管理や、文字列の扱いに慣れていれば素直に解ける問題ですね。ただ、「JOI」を見つけた時点でブロックを切ってしまうと、「JOIG」だった時に困るため、条件分岐の順番的な難しさはあったかもしれません。
- 問題文(AtCoder)/問題文(公式)/解説/解答例(C++・Python)
F問題「お菓子配り」
N人の友達に、アイスクリーム(X個)かチョコレート(Y個)のどちらかを1個ずつ配ります。友達iはアイスで A_i、チョコで B_i の嬉しさを得るので、嬉しさの合計の最大値を求める問題です。Nは最大200,000です。
| 小課題 | 条件 | 配点 |
|---|---|---|
| 1 | N = 1 | 5点 |
| 2 | X = N、Y = 0 | 5点 |
| 3 | X = N、Y = N | 5点 |
| 4 | X = N、Y = 1 | 25点 |
| 5 | X + Y = N | 25点 |
| 6 | N ≦ 10 | 10点 |
| 7 | 追加の制約なし | 25点 |
考え方は、まず全員にアイスを配り、「アイス→チョコに変えると嬉しさが B_i - A_i 増える」人から順に入れ替えていく というものです(ソート+貪欲法)。入れ替える人数は N - X 人以上 Y 人以下でなければならないので、その範囲の中で合計が最大になるところを探します。
講師の目線: 上で書いたとおり、満点は140人(8.6%)と、さすがに二次予選レベルの問題でした。 ただ、1〜19点の人が97人 いることにも注目したいです。満点は取れなくても、小課題1〜3(N = 1、全員アイス、どちらでも選べる)の5点ずつを拾いに行った人が多かったということです。
実際、当塾から参加した生徒も、部分点で10点は取れたという子が何人かいました。 最後の問題だからと読まずに諦めるのではなく、小課題の一覧だけは必ず目を通すというのも、部分点があるタイプの問題では大切な姿勢です。
今回出てきた「貪欲法」という考え方は、二次予選でも頻出の考え方です。貪欲法については貪欲法(グリーディ法)とは?でも詳しく解説しています。
- 問題文(AtCoder)/問題文(公式)/解説/解答例(C++・Python)
講師として感じたこと
今回の第1回を振り返って、講師として一番強く感じたのは、一次予選が「文法を知っているか」から「考えて使えるか」を見る試験に変わってきた ということです。
特に、C問題などの「予選Bランクレベルの問題」で応用的な問題が出てきたのは、来年に向けての指導・勉強内容に大きくかかわってくるなと感じています。
ただ文法を覚えるだけではなく、「なぜそう解けるのか」を自分の言葉で説明できるところまで持っていく。新形式の一次予選は、その積み重ねがそのまま点数に表れる試験になったと感じました。
第2回に向けて
一次予選の第2回は 2026年10月25日(日)14:00〜15:20 に行われます。 一次予選に複数回参加した場合は、成績の最大値が使われる ので、第1回で思うような点が取れなかった人も、もう一度チャンスがあります。
講師として、第2回までにやってほしいことは次の3つです。
- 前半3問を確実に取れるようにする。 C問題の満点率が4割を切ったように、「基本問題」でも油断はできません。書き始める前に、小さい例を紙に書いて答えの決まり方を考える練習をしましょう。
- 二重ループの問題を得意にする。 D問題は昨年までのD問題と同じく、配列と二重ループの問題です。過去のD問題を何問か解いておけば、300点がぐっと近づきます。
- 後半の問題でも、小課題を1つずつ拾う。 E・F問題の小さい小課題で20点・30点を積み上げれば、500点の二次予選ラインが見えてきます。本番では、後半の問題も小課題の一覧だけは必ず読みましょう。
一次予選のこれまでの問題の難易度や、二次予選との違いについては、こちらの記事でまとめています。

関連リンクまとめ
HaruCoderについて
中学生・高校生向けのオンライン競技プログラミング教室です。
情報オリンピック(JOI)一次予選突破率9割以上、AtCoder水色講師による個別指導。
月謝14,800円〜・入会金0円・オンライン全国対応。