CodeQUEEN 2026に協賛しました
2023年、2024年、2025年に引き続き今年もフォルシアはCodeQUEENに協賛しスポンサー活動を実施しました。
当日のブース出展の様子や、ブースで出題していたクイズの解答を掲載しているのでぜひご覧ください。
CodeQUEENとは?
CodeQUEENは、AtCoder株式会社と合同会社AlgoParadeが共催する 女性向けプログラミングコンテスト です。コンテストの予選はオンライン、本選は全国の参加者が一堂に会して実施されます。
決勝は渋谷ソラスタコンファレンスで行われ、ある条件で選抜された70名が参加しました。
競技プログラミングについて
競技プログラミングでは、与えられた入力に対して正しい答えを出力するプログラムを作成する問題が出題されます。『ゲームでどちらが勝つかを求める問題』『パズルの解法を求める問題』『ものの並べ方が何通りかを数える問題』など、色々な種類の問題があります。
競技プログラミングでは各問題に『実行時間制限』が与えられています。大抵の問題では全てのパターンを探索するプログラムを書いても実行時間制限に間に合いません。ちょうど、オセロの必勝法を求めるのに全パターン探索していたらいつまでも終わらないのと同じイメージです。問題を良く分析し実行時間に間に合うような効率的な解法を考えるのが競技プログラミングの面白さです。
スポンサー活動
協賛特典として当日会場に企業ブースを出展させていただきました。ブースでは毎年恒例となっているクイズ企画を行い、たくさんの方に楽しんでいただけたのではないかと思います。当日スタッフとして参加していたメンバーからの感想をご紹介します。
- 各スポンサー企業が腕によりをかけて問題を作り、配布していました。参加者のみなさまがメモを取りながら唸っている姿は、さすが競プロの猛者だなと感嘆しました。ほとんど競プロの経験がなかったのですが、みなさまが夢中になる姿を見て、始めてみようかなと思っています。
- コンテスト後の疲労がたまってる状態にもかかわらず、多くの参加者の皆様に弊社ブースで配布していたクイズに挑戦いただいており、その熱量に大変驚かされました。去年よりも参加者の数も増えてると耳にしたため、来年以降もコンテストの盛り上がりに貢献できるように取り組んでいければと考えております。
- 参加者の皆さんのクイズを熱中して解く姿が輝いていて、競プロを本当に好きなことが伝わりました。また、他ブースの企業さん含め、会場全体で盛り上げようという良い雰囲気の中で参加者さんと交流ができ、とても良い経験になりました。その中で、少しでもフォルシアの魅力が参加者の皆さんに伝わっていると嬉しいです。
ブースにお越しいただいた皆さまありがとうございました!
クイズの解説
ここからはブースで出題していたクイズの解説を行います!
A問題 25 = 4! + 1
答え :AC
解説:
AtCoder Conference 2025にて出展していた協賛企業ブースで出していた問題と同じ問題です。あと5年は同じ問題が出せますね。擦っていきたいと思います。
解説はこちらに載せていますので是非ご覧ください。
B問題 リバーシ(easy)
答え :2
解説:
以下の手順により、白石2つですべてのマスを黒にすることが可能です。また、白石1つではすべてのマスを黒に出来ないことも場合分けにより示せます。
..... .B... .B... .B.B. .B.B.
.WBW. .BBW. WWWW. WWWB. WWWB.
.BWB. .BWB. .BWB. .BWB. WWWB.
.WBW. .WBW. .WBW. .WBW. .WBW.
..... ..... ..... ..... .....
.BBB. BBBB. BBBB. BBBB. BBBB.
WWBB. WWBB. WWBB. WBBB. BBBB.
WWBB. WWBB. WWBB. WBBB. BBBB.
.WBW. .WBW. .WBBB .BBBB BBBBB
..... ..... ..... .B... .B...
あとは外周に黒石を置いていくだけ
C問題 リバーシ(hard)
答え :6077
解説:
より一般的に次を示します。
盤面の横幅を
a(奇数)、中央ブロックの幅をb(奇数)、ブロック左右の余白の幅をt = (a−b)/2とするとき、「全ての石を黒にすることが可能 ⟺b ≤ 6t + (−1)^t」
C問題では t=1013 のときの b の最大値を求めればよいので、 1013 × 6 - 1 = 6077です。
【必要性】「全ての石を黒にすることが可能 ⇒ b ≤ 6t + (−1)^t」 の証明
より容易に達成できる「はじめから石が置かれている3行b列の領域(以下、ブロック)の全ての石を黒にする」ことを目標にし、そのために左右の余白がt列以上必要なことを示します。
ここで、1 ≤ x < bに対し、以下の処理を「ブロックのx列目に対する切れ目イベント」と呼ぶことにします。
1以上3以下の整数yを選んでy行目の左右いずれかの余白に石を置き、ブロックのy行1列目からx列目(もしくはx+1列目からb列目)の石をひっくり返す。ブロックのそれ以外の石はひっくり返さない。
すると、以下の主張が成り立ちます(証明では、隣り合う2列に着目しその境目で切れ目イベントが発生しない場合に市松の色違いが解消できないことを示します)。
ブロックの石をすべて黒にするためには、任意のxに対し「ブロックのx列目に対する切れ目イベント」を実施する必要がある。
左右の余白は合計で 6t マスあるため、全ての石をひっくり返すためには b -1 ≤ 6t 、つまり b ≤ 6t + 1 が必要です。
さらに、t が奇数の場合は等号が成り立ちません。等号が成り立つときは全ての左右の余白が切れ目イベントに寄与する必要がありますが、 t が奇数の場合ブロックの1列目を全て黒にできないことが示せるためです。
したがって、t が奇数の場合は b < 6t + 1 が成り立ち、 b が奇数より b ≤ 6t + (−1)^t です。
【十分性】「b ≤ 6t + (−1)^t ⇒ 全ての石を黒にすることが可能」 の証明
以下の手順により、b = 6t + (−1)^t の場合に全てのマスを 黒石にできます。
① (t が奇数の場合のみ)以下の操作により「ブロック」の1列目と2列目を黒にする
.B..... .B..... .B..... .B..... .WBWBWB .WBWBWB WBWBWBW WBWBWBW WBWBWBW .BWBWBW .BWBWBW .BWBWBW .BWBWBW WBWBWBW .WBWBWB .WBWBWB .WBWBWB .BBWBWB .BBWBWB ....... ....... ....... .B..... .B..... B...... B...... BB..... BBB.... BBB.... WBWBWBW BWBWBWB BBBWBWB BBBWBWB BBBWBWB WWWBWBW BWWBWBW BBWBWBW BBWBWBW BBBBWBW WWWBWBW BWWWBWB BBWBWBW BBWBWBW BBBWBWB .B..... BB..... BB..... BB..... BBB....
② 以下の操作を floor(t/2)回繰り返す。
一回の操作では、2列の余白を使うことで6列のブロックをすべて黒にする。
以下で、Xは黒石が0個以上連続している行、Yは白石が0個以上連続している行を表す。
..X....... ..X....... ..X....... ..XB...... ..XB......
..XWBWBWBW ..XWBWBWBW ..XWBWBWBW ..XBBWBWBW ..XBBWBWBW
..XBWBWBWB .WYWBWBWBW BBXBBBWBWB BBXBBBWBWB BBXBBBWBWB
..XWBWBWBW ..XWBWBWBW ..XWBWBWBW ..XWBWBWBW ..XBBWBWBW
..X....... ..X....... ..X....... ..X....... ..XB......
..XBB..... ..XBB..... ..XBBB.... ..XBBB.... ..XBBB....
..XBBWBWBW ..XBBWBWBW ..XBBBBWBW .WYWWWWWBW .WYWWWWWBW
BBXBBBWBWB BBXBBBWBWB BBXBBBWBWB BBXBBBWBWB BBXBBBWBWB
..XBBWBWBW ..XBBWBWBW ..XBBWBWBW ..XBBWBWBW ..XBBBBWBW
..XB...... ..XBB..... ..XBB..... ..XBB..... ..XBBB....
..XBBBB... ..XBBBB... ..XBBBB... ..XBBBBB.. ..XBBBBB..
BBXBBBBWBW BBXBBBBWBW BBXBBBBWBW BBXBBBBWBW BBXBBBBWBW
BBXBBBBBWB BBXBBBBBWB BBXBBBBBWB BBXBBBBBWB BBXBBBBBWB
..XBBBBWBW ..XBBBBWBW ..XBBBBWBW ..XBBBBWBW ..XBBBBBBW
..XBBB.... ..XBBB.... ..XBBBB... ..XBBBB... ..XBBBBB..
..XBBBBB.. ..XBBBBB.. ..XBBBBBB. ..XBBBBBB. .BXBBBBBB.
BBXBBBBBBW BBXBBBBBBW BBXBBBBBBW BBXBBBBBBW BBXBBBBBBW
BBXBBBBBWB BBXBBBBBWB BBXBBBBBBB BBXBBBBBBB BBXBBBBBBB
.WYWWWWWW .WYWWWWWW .WYWWWWWBW BBXBBBBBBW BBXBBBBBBW
..XBBBBB.. ..XBBBBB.. ..XBBBBBB. ..XBBBBBB. ..XBBBBBB.
.BXBBBBBB. .BXBBBBBB. BBXBBBBBB.
BBXBBBBBBW BBXBBBBBBW BBXBBBBBBW
BBXBBBBBBB BBXBBBBBBB BBXBBBBBBB
BBXBBBBBBW BBXBBBBBBW BBXBBBBBBW
.BXBBBBBB. BBXBBBBBBB. BBXBBBBBBB.
③ 上記と同様の操作を右側の余白についても行う。
④(tが奇数の場合のみ)中央の列が市松模様のまま残っているので、上下に石を置いてひっくり返す。
以上となります。皆さまお楽しみいただけたでしょうか?
最後に
今年で4年目となりましたが、毎年CodeQUEENというイベントに協賛し参加者の皆様と交流させていただいていることをとても嬉しく思います。
参加者の皆様、大変お疲れさまでした!来年の夏も楽しみです。
フォルシア技術広報メンバー
今夏はAtCoderさんのイベントにたくさん参加させていただきました



