AtCoder Conference 2025に協賛・参加しました
こんにちは、エンジニアの田屋です。フォルシアでは2025年12月13日(土)に渋谷ソラスタコンファレンスにて開催されたAtCoder Conference 2025 にゴールドスポンサーとして協賛し、当日はブースの出展やセッション登壇をしました。
本記事ではイベント当日の様子についてレポートしていきます。
AtCoder Conferenceとは
AtCoder Conferenceは、AtCoder社が競技プログラミングの祭典として開催するオンサイトイベントです。初開催となる今回は、AtCoderユーザー300名を招待し、日本一の競技プログラマーを決定する大会「AtCoder Japan Open」を中心に、様々なコンテンツが展開されました。
https://atcoder.jp/contests/atcoderconference2025
「AtCoder Japan Open」の本選出場者以外の方でも本選の熱気を感じられる観戦エリアをはじめ、企業ブースの出展やAtCoderユーザなど向けのトークセッションなど、まさに競技プログラマーが楽しめるお祭りイベントです。
協賛のきっかけ
フォルシアには「競技プログラミング経由でエンジニアに興味を持った」という社員が一定数おり、社内公認サークルの「競プロ部」、主催するオンサイトコンテスト「ゆるふわオンサイト」など競技プログラミング関連の活動が活発です。
過去には女性限定競技プログラミングコンテスト「CodeQUEEN」、「ICPC Yokohama Regional 2025」といった競技プログラミング・アルゴリズム系イベントにも協賛を行っており、スポンサーとしてだけでなく、社員が選手や一般参加者としてイベントに参加することもしばしばありました。
そんな中、AtCoder社が新たなお祭りイベントを開催する、ということも当然話題になり、是非スポンサーとして参加させていただきたいと話が進んでいきました。
- 3年連続でフォルシア社員が参加・協賛しているイベント「CodeQUEEN」についてはこちら!
https://www.forcia.com/blog/002983.html - 前回のゆるふわオンサイト開催レポートや、普段の競プロ部の活動の様子は以下の記事も是非、合わせてご覧ください。
https://www.forcia.com/blog/003203.html
スタッフとして参加してみた感想
当日はスポンサースタッフとして参加しました。
AtCoder Conference では、参加者が全ブースをめぐると景品が貰える仕組みがあり、それもあってか大変多くの方にフォルシアのブースにお越しいただきました。フォルシアのブースでは、参加者向けに競プロっぽいクイズを3問を出題しており、多くの方に挑戦していただきました。中には何時間も問題に取り組んで正解にたどり着く方もいらっしゃり、競技プログラマーの問題に向き合う熱意をひしひしと感じられました。
企業ブース内では参加者向けに AtCoder Japan Open の決勝観戦スペースも設けられ、そこでは解答の提出がある度に「正解するのか...」と注目を集めていました。その後の余興も面白いコンテンツが用意されており、一般参加者も交えて盛り上がっていました。筆者も競技プログラミングを楽しむ一人として、競プロが観戦コンテンツとして活気を帯びていることに驚きました。
AtCoder Japan Open というオンサイトの決勝イベントにとどまらず、AtCoder Conference というイベントへと展開されることで、参加者同士やスポンサーとの交流が促進されており、会場は活況を呈していました。
クイズ解説
当日、社員が作成したフライヤーのクイズは多くの参加者の方々にご好評をいただきました。以下は作問した社員による各問題の解説となります!
A問題 25 = 4! + 1
今年で創立25年目のFORCIAのオフィスはJR新宿ミライナタワー13階にあります。 『F・O・R・C・I・A』を並び替えてできる文字列を辞書式順序で並べたときに25番目にくる文字列の1文字目と3文字目を答えてください。
答え : AC
A問題の解説
『F・O・R・C・I・A』をアルファベット順に並べると『A・C・F・I・O・R』です。
最初の2文字が『AC』の文字列の個数は4×3×2×1=24個です。
つまり、『AF』からはじまる最初の文字列である『AFCIOR』が辞書順で25番目になります。
1文字目と3文字目は『AC』です。
B問題 やや大きな数
次の条件を満たす整数Xの最小値を求めてください。 【条件】1 以上 X 以下の相異なる整数 a~h を使って、以下の等式を完成させることが出来る。 **a^b^c^d = e^f^g^h** ( ^ は累乗を表しており、右から順に計算します。つまり 2^3^2 = 2^9 = 512。) ※ヒント : a~hのいずれかは1です
答え:17
B問題の解説
①a~hの最大値が17の例が存在する。
天下り的ではありますが、X=17の場合に以下の解が存在します。
3^8^17^1 = 9^4^5^2
以下、X=16の場合に解が存在しないことを証明します。
②「d=1」もしくは「h=1」が成立する。
たとえば 「c=1」だと仮定すると a^b^c^d = a^b < 16^16 < 5^4^2^3 < e^f^g^h で矛盾します。
同様に、a,b,d,e,fが1の場合も矛盾するため、ヒントも使用し「d=1」もしくは「h=1」だとわかります。
③ a, e の値を絞り込む。
対称性より「a < e」を仮定します。まず、 (log e / log a) はあきらかに有理数です。
ここで「(a,e)=(4,8)」だと仮定すると、3 ×(b^c^d)= 2 × (f^g^h) となりますが、c^d > 1, g^h > 1 で成立するためには b, f が6の倍数となる必要があります。つまり、「(b,f)=(6,12),(12,6)」のいずれかですが、いずれの場合も解はありません。
同様に「a=8, e=16」の場合も解はありません。
つまり、(log e / log a) は整数となり、「(a,e)=(2,4),(2,8),(2,16),(3,9),(4,16)」 のいずれかになります。
④ 「c=2」「d=2」「g=2」「h=2」いずれかが成立する。
c^d の値とg^hの値の比に着目します。
たとえば、(a,b)=(16,16), (e,f)=(2,2) のようにa,bが最大、e,fが最小を仮定すると、c^d = 4 × g^h + 2 が成立します。
また、d=1 もしくは h=1より、c^d, g^h ≦ 66 が成立します。
上記の評価はかなり大雑把で、より細かく評価すると、c^d, g^h < 64 まで評価を強められます。
一方、 c,d,g,hいずれも3以上の場合はc^d, g^hいずれかが64以上になってしまうので、c,d,g,hのどれかは必ず2です。
⑤ 「(a,e)=(3,9) 」しかありえない。
①④より 「(a,e)=(3,9),(4,16)」 まで絞れます。
いずれの場合も (b^c^d)= 2 × (f^g^h) です。
したがって、b, f はいずれも2のべき乗になりますが、④よりb≠2, f≠2のため (a,e)=(3,9) のみに絞られます。
⑥ X=16で解はない。
(b^c^d)= 2 × (f^g^h), b≠2, f≠2 より、とりえるb,fの選択肢は 「(b,f) = (4,8), (4,16), (8,4), (8,16), (16,4), (16, 8)」 です。
これ以上考察で絞り込むのは難しくなってくるので、あとは場合分けで解を探します。
たとえば (b, f) = (8, 4) の場合は、3 × c^d = 2 × g^h + 1 が成立します。
- d=1の場合 : 3 × c = 2 × g^h + 1。(c, g, h) = (17, 5, 2) が最小で16以下の解はない
- h=1の場合 : 3 × c^d = 2 × g + 1。(c, d, g) = (5, 2, 37) が最小で16以下の解はない
その他の場合も同様に式を解いて、すべての値が16以下であるような解が存在しないことが分かります。
なお、「a~hのいずれがは1である」のヒントがない場合、手計算でX=16が解ではないことを示すのは困難になります(もし良いやり方があったら教えてください!)。
実際にプログラムを書いて確かめたところ、「a~hのいずれがは1である」の仮定がなくてもすべての値が16以下であるような解は存在しませんでした。
C問題 よりみち(大)
つぎの条件を満たす整数の組(X, Y, Z, W)の個数を求めてください。 縦25マス、横25マスの町があり、ごりらさんの家はX行Y列目のマス、ごりらさんの学校はZ行W列目のマスにある。このとき、ごりらさんが家から学校まで移動する経路で、以下の条件を満たすものが存在する。 - 1回の移動では縦または横の隣接するマスに移動する。 - すべてのマスをちょうど1回ずつ通る。 - 経路上で直角に曲がる回数は高々48回である。
答え:30800
C問題の解説
① 曲がる回数は47回以下にできない。
曲がる回数が47回以下の場合、縦方向の移動、横方向の移動がいずれも24回以下になります。
一方、マスは縦横25マスあるため、縦方向にも横方向にも通らないマスが必ずできてしまいます。
したがって、すべてのマスを通ろうとすると、最低48回曲がる必要があります。
以下、上からA行目左からB列目のマスを (A, B) と表記することにします。
とくに、家のマスは (X, Y)、学校のマスは (Z, W)と表記できます。
② X+Y, Z+Wの値は偶数。
マス目を角が黒色の市松模様に塗りつぶすと、家から学校までの経路は白マスと黒マスが交互になります。
黒マスの方が1マス多いので、経路は「黒→白→ ... →白→黒」の順になる必要があります。
したがって、家も学校も黒マスに存在するため、X+Y, Z+Wの値は偶数です。
③1回目の移動方向で場合分けをする。
以下、1回目の移動が「縦方向」と仮定します。
このとき、縦方向の移動が25回、横方向の移動が24回となり、「① 曲がる回数は47回以下にできない」の考察より
- 縦方向の移動で使う列はすべて異なる
- ある行が存在し、この行を通るマスはすべて縦方向である(家や学校の可能性もある)
の2点が成立します。
ここで、たとえば「上 → 横 → 上」のような経路が存在した場合、上記2点を同時にクリアすることはできません。
したがって、縦方向の中でも「上方向」と「下方向」は必ず交互になります。
以下、1回目の移動が「下方向」と仮定します。
すると、経路は必ず「下→横→上→横→ ... 下→横→上」の順になります(横の左右は不明)。
④ X ≦ Y、X ≦ 26 - Y、26 - Z ≦ W、26 - Z ≦ 26 - W が成立する。
「ある行が存在し、この行を通るマスはすべて縦方向である」という仮定より、ある X' ≧ Xが存在し、X'行目を通るマスはすべて縦方向です。
- マス (X',1), (X',2),...,(X',Y-1) は必ず縦方向に経路が通過する
- マス (X,Y) から マス (X',Y) に一直線に経路が通過する
の2点が成立します。
一方、「縦方向の移動で使う列はすべて異なる」という仮定と1回目の移動が下方向であることから、
- マス (1,Y), ..., (X-1,Y)は必ず横方向に経路が通過する
が成立します。
ここで「マス目の左上の縦X'-1マス横Y-1マスの長方形」に着目すると、これらを出入りする経路は
- マス (X',1), (X',2),...,(X',Y-1) を横切る縦方向の経路
- マス (1,Y), ..., (X-1,Y)を横切る横方向の経路
のみです。
またこの長方形の中で横方向に出入りする経路同士を直接結ぼうとすると縦移動が発生し「縦方向の移動で使う列はすべて異なる」に矛盾するため、「縦と横を結ぶ」「縦同士を結ぶ」の2択しかありません。
したがって、横切る経路は縦方向の方が多く 「X ≦ Y」 が成立します。
同様に「マス目の右上の縦X'-1マス横25-Xマスの長方形」に着目することで、 「X ≦ 26 - Y」 も成立します。
Z, W についても同様の考察をして、 「26 - Z ≦ W」「26 - Z ≦ 26 - W」 です。
⑤ Y ≠ W が成立する。
YとWが一致すると仮定した場合、
- 最初の移動、最後の移動はいずれも縦方向
- 縦方向の移動で使う列はすべて異なる
ことから、家と学校が縦の経路で直接結ばれます。
これはありえないため、Y≠Wが成立します。
⑥ 全通り数え上げる。
上記の考察より、1回目の移動が「下方向」の場合、
- X+Y, Z+Wの値は偶数
- X ≦ Y、X ≦ 26 - Y、26 - Z ≦ W、26 - Z ≦ 26 - W
- Y ≠ W
の3点がなりたっており、逆にこれら3点がなりたっている場合は具体的な経路を構成することが出来ます(少し大変ですが...)。
「上方向」「右方向」「左方向」でも同様の議論が成立するため、あとは手計算で全通り数え上げて 「30800通り」 になります。
家・学校が対角線上にある場合に重複排除が必要なことに注意してください。
エンジニア募集中
当日会場ではスポンサーとして、カンファレンス参加者へエンジニア募集フライヤーを配布いたしました。
競技プログラミングで養った力を活かしたい、競プロer達と業務プログラミングにも挑戦していきたい!というエンジニアの方は、まずはフォルシアのカジュアル面談にいらしてください!
ぜひお待ちしております。
田屋 大輝
新卒2年目エンジニア。
最近はイッツアワンダフルワールドというボードゲームにハマっています



