Upgrade to Pro — share decks privately, control downloads, hide ads and more …

BrainPadプログラミングコンテスト記念LT会2025_社内イベント&問題解説

 BrainPadプログラミングコンテスト記念LT会2025_社内イベント&問題解説

2025年6月25日に実施した、BrainPadプログラミングコンテスト2025 開催記念LT会でのブレインパッド田口の登壇スライドです。

イベントURL
https://brainpad.connpass.com/event/359630/

コンテストURL
[BrainPad プログラミングコンテスト 2025 (AtCoder Heuristic Contest 046) - AtCoder]
https://atcoder.jp/contests/ahc046

Avatar for BrainPad

BrainPad

June 25, 2025
Tweet

More Decks by BrainPad

Other Decks in Technology

Transcript

  1. 2 ©BrainPad Inc. Strictly Confidential 自己紹介 入社 田口 雅也 Taguchi

    Masaya 2024年新卒入社 職種 専攻 数学(最適化アルゴリズム) # DC計画問題 # 逆凸計画問題 趣味 • ドラム • 温泉 • 旅行 案件 • 2024年7月〜:配送計画問題 データサイエンティスト
  2. 7 ©BrainPad Inc. Strictly Confidential 社内勉強会(b2b:BrainPad to BrainPad) ブレインパッドでは年間300回以上の社内勉強会(b2b)が開催されています。AIやデータサイエンス、エン ジニアリングに関わる最先端の知識・技術などを、日常的に学ぶことができます。

    ブレインパッド社内勉強会一覧(抜粋) Kaggle:LLMコンペ振り返り 因果推論勉強会 LLM論文レビュー会 ベイズ最適化をゼロから 競技プログラミングは本当に役に立つのか? 1on1をどうやっているか 職務経歴書の変遷お見せします asano/アサノ「2023年のブレインパッドの社内勉強会を公開!!!」
  3. 8 ©BrainPad Inc. Strictly Confidential 勉強会兼交流会(白金鉱業Meetup) ブレインパッドのデータサイエンティスト/機械学習エンジニアが社外のデータ系の仕事をしている人と交流 したい!と始まった勉強会兼交流会イベントです。 白金鉱業Meetupイベント一覧(抜粋) AIエージェント

    データマネジメント 数理最適化 効果検証 若手データサイエンティスト交流会 実務におけるLLM、あるある課題共感し合おう! ダイナミックプライシング データサイエンティストが集まる夜 白金鉱業Meetup Vol.15 効果検証 開催レポート | DOORS DX 登壇の様子 イベント後の懇親会
  4. 9 ©BrainPad Inc. Strictly Confidential オウンドメディアの紹介 DOORS @doors_brainpad ブレインパッド公式技術メディア 生成AI・LLMやデータサイエンスプロジェクトについて発信しています!

    OpenBP @Open_BrainPad 会社の神資料を公開するプロジェクト 統計学の資料がITmediaとNIKKEIリスキリングに取り上げられました! 白金鉱業FM @shirokane_fm 会社のみんなでやっているpodcast 高校の放送部的なノリでデータサイエンスについて語っています!
  5. 11 ©BrainPad Inc. Strictly Confidential BrainPadプログラミングコンテスト2025|問題 ◼ 問題概要(Skating with Blocks)

    • 20×20のマス目からなるスケートリンクがある。スケートリンク の外部はすべてブロックで覆われており、通過できない。初期状態 では、スケートリンクの内部にブロックは存在しない。 • あなたは初期位置におり、各ターンでは上下左右のいずれかの方向 を指定し、「行動パターン」のいずれか1つを選んで実行できる。 • できる限り少ないターン数で1~39のすべての目的地を順番通りに 訪れよ。ただし、目的地を訪れたと判定されるには”移動”でそのマ スに到達するか、”滑走”でそのマスに停止する必要がある。 ◼ 行動パターン 移動 滑走 変更 指定した方向に隣接する マスへ1マス移動する。 指定した方向へ、ブロッ クにぶつかるまで直線的 に滑走する。 指定した方向に隣接する マスに対し、ブロックを 設置/除去する。 既にブロックがある 場合は除去 20×20のマス目からなるスケートリンク BrainPadプログラミングコンテスト2025(AtCoder Heuristic Contest 046)
  6. 12 ©BrainPad Inc. Strictly Confidential BrainPadプログラミングコンテスト2025|解法(1/8) 今回は「変更」を使用しないで解く方法を紹介します。 20×20のマス目からなるスケートリンク 初期位置 (3,

    7) 目的地 (14, 16) 考え方 まず最初に、現在の状況を確認します。 • 初期位置:(3, 7) • 最初の目的地:(14, 16) この2点間を最短で移動するための経路を考えます。
  7. 13 ©BrainPad Inc. Strictly Confidential BrainPadプログラミングコンテスト2025|解法(2/8) 「移動」のみで最短経路を考えます。 20×20のマス目からなるスケートリンク 考え方 ①

    (“右”の”移動”)×9 ② (“下”の”移動”)×11 初期位置 (3, 7) 目的地 (14, 16) まず最初に、現在の状況を確認します。 • 初期位置:(3, 7) • 最初の目的地:(14, 16) この2点間を最短で移動するための経路を考えます。 最短経路は複数考えられますが、以下はその一例です。 • ① “右”に9回”移動”し、 • ② “下”に11回”移動”する 20 ターン
  8. 14 ©BrainPad Inc. Strictly Confidential 右方向への移動について2パターンを右図に示しています。 この図からも分かるように、右図のケースでは「滑走 + 移動」を活用した方が、必要なターン数を少なく抑える ことができます。

    BrainPadプログラミングコンテスト2025|解法(3/8) 今回の問題は、できる限り少ないターン数で1~39のすべての目的地を順番に訪れることが得点に直結します。 ここからは、ターン数を削減するために滑走を利用した効率的な移動方法をご紹介します。 考え方 (“右”の”移動”)×9 初期位置 (3, 7) 初期位置 (3, 7) ① (“右”の”滑走”)×1 ② (“左”の”移動”)×3 “移動”のみ “滑走” + “移動” 9 ターン 4 ターン 移動 滑走 指定した方向に隣接する マスへ1マス移動する。 指定した方向へ、ブロッ クにぶつかるまで直線的 に滑走する。
  9. 15 ©BrainPad Inc. Strictly Confidential 下方向への移動について2パターンを右図に示しています。 この図からも分かるように、右図のケースでも「滑走 + 移動」を活用した方が、必要なターン数を少なく抑える ことができます。

    BrainPadプログラミングコンテスト2025|解法(4/8) 同様に、下方向の移動も滑走を活用した方が必要なターン数を少なく抑えることができます。 “移動”のみ “滑走” + “移動” 目的地 (14, 16) 目的地 (14, 16) 位置 (3, 16) 位置 (3, 16) (“下”の”移動”)×11 (“下”の”滑走”)×1 (“上”の”移動”)×5 11 ターン 6 ターン 考え方 移動 滑走 指定した方向に隣接する マスへ1マス移動する。 指定した方向へ、ブロッ クにぶつかるまで直線的 に滑走する。
  10. 16 ©BrainPad Inc. Strictly Confidential BrainPadプログラミングコンテスト2025|解法(5/8) 「滑走」を活用したことで必要なターン数を抑えることができました。 初期位置 (3, 7)

    目的地 (14, 16) ② (“左”の”移動”)×3 ① (“右”の”滑走”)×1 ③ (“下”の”滑走”)×1 ④ (“上”の”移動”)×5 10 ターン 「滑走」を活用した方法 「移動」のみを活用した方法 ① (“右”の”移動”)×9 ② (“下”の”移動”)×11 初期位置 (3, 7) 目的地 (14, 16) 20 ターン
  11. 17 ©BrainPad Inc. Strictly Confidential BrainPadプログラミングコンテスト2025|解法(6/8) 方向を切り替える位置は、現在の位置と目的地が分かれば求めることができます。 これを利用して「移動のみ」と「滑走 + 移動」の移動回数をそれぞれ求めることができます。

    (1, 0) (1, 2) 目的地 (4, 2) (1, 0) (1, 3) 目的地 (4, 3) “移動”のみが最適なケース (“滑走” → “移動”)が最適なケース 2回の”移動” 3回の”移動” 1回の”滑走” & 2回の”移動” 1回の”滑走” & 1回の”移動”
  12. 18 ©BrainPad Inc. Strictly Confidential BrainPadプログラミングコンテスト2025|解法(7/8) 方向を切り替える位置を一般化したものです。 現在の位置が(𝑖0 , 𝑗0

    )、目的地が(𝑖1 , 𝑗1 )の場合、方向を切り替える位置は(𝑖0 , 𝑗1 )になります。 (𝒊𝟎, 𝒋𝟎) (𝒊𝟎, 𝒋𝟏) (𝒊𝟎, 19) 目的地 (𝒊𝟏, 𝒋𝟏) (𝒋𝟏 – 𝒋𝟎 )回の”移動” 1回の”滑走” & (19 – 𝒋𝟏 )回の”移動” ◼ 擬似コード 考え方 「移動のみ」と「滑走 + 移動」の移動回数を右図のよう に計算し、値が小さい移動方法を採用します。