Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
競技プログラミングへのお誘い@阪大BOOSTセミナー
Search
Aoyama Koki
December 15, 2024
Programming
640
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
競技プログラミングへのお誘い@阪大BOOSTセミナー
Aoyama Koki
December 15, 2024
Other Decks in Programming
See All in Programming
『寄り添うラジオ』をAIで作る 体験価値から逆算した、会話しないUXと品質設計
theoriatec2024
2
120
初めての模倣学習とVLA
natsutan
0
490
Deep dive into the select statement (GopherCon UK)
jespino
0
170
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
130
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
3
470
Press start. Python's next generation.
willingc
PRO
3
310
変化を抱擁するドキュメントの作り方 - ビジネスルール駆動開発がもたらす、コードとの新しい関係
ioki
2
110
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
190
Building an Out-of-Order CPU
latte72
0
690
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
0
430
一参加者から『中の人』へ 〜全通PHPerがブースに立って学んだ、カンファレンスを100倍楽しむコツ〜
wp_daisuke
0
120
数年滞っていたダークモード対応をおよそ2週間で完了させる
chigichan24
0
680
Featured
See All Featured
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
530
Balancing Empowerment & Direction
lara
6
1.3k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Paper Plane
katiecoart
PRO
2
53k
Evolving SEO for Evolving Search Engines
ryanjones
0
280
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.9k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Test your architecture with Archunit
thirion
2
2.4k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
65k
Statistics for Hackers
jakevdp
799
230k
Product Roadmaps are Hard
iamctodd
55
13k
Transcript
競技プログラミングへのお誘い 大阪大学大学院 情報科学研究科 CS専攻伊野研究室 D1 青山 昂生 2024/12/15 1 元画像:
TCO19ブログ https://www.topcoder.com/blog/konichiwa-community-the-tco19-japan-regional-event-rises-up
kotamanegi (@small_onions) CS専攻 並列処理工学講座 伊野研究室 D1 競技プログラミング ICPC2024 World Finalist
ICPC2024 Yokohama 銅メダル AtCoder アルゴ橙 (304位/117926人) ヒュ黄 (142位/5623人) 2024/12/15 2 自己紹介 今日は競技プログラミングの話をします 名前 趣味 競プロ 実績 所属
2024/12/15 3 競技プログラミングとは? 要件を満たすプログラムを作成する素早さを競う コンテスト時間以内になるべく早く提出する競技 与えられた問題文を読み、 要件を満たすアルゴリズムを考案し 正確にプログラムに落とし込み 競技プログラミングの本質はこちら。 適切なアルゴリズムを思いつかないと
実装困難・要件を満たさない 非本質と言われがち。 実際にはバグを少なく実装するための 実装テクニックで差がつく
2024/12/15 4 体験談 “ICPC 2021 Asia Yokohama Regional Problem K
の想定解と、 そこから派生した割当問題に対する謎アルゴリズムに関する 論文を書きました。 競プロは業務の役に立つ!” 山口 勇太郎 先生 理論計算機科学や機械学習の論文が書ける(こともある) 競技プログラミングの テクニックを活用 Xポスト: https://x.com/preferred_jp/status/1727243266654093401
• イントロダクション • 競技プログラミングの面白さ • 競技プログラミングとコミュニティ • 競技プログラミングと外部のつながり • まとめ
2024/12/15 5 もくじ
• イントロダクション • 競技プログラミングの面白さ ◦ 求められるスキルの種類 ◦ 実際の問題例 ◦ 実装テクニックの紹介
• 競技プログラミングとコミュニティ • 競技プログラミングと外部のつながり • まとめ 2024/12/15 6 もくじ
2024/12/15 7 競技プログラミングで求められるスキル 数学的思考力・プログラミング力・正確性が求められる 数学的思考力 問題文から本質を見つけ、 適切に簡略化する力 自然言語で書かれた要件を 簡潔な条件に読み替えて 実装しやすいようにまとめる
要件整理や解決アイデアの 着想に役立つ 正確性 問題文を正確に読み プログラムをバグなく 適切に実装する力 精度と速度のバランス感覚 や実装テクニック、経験などを 活用し高い精度を実現する 人生のあらゆる場面で 役に立つ プログラミング力 プログラムを 素早く実装する力 タイピング速度の向上や 文法への理解など 総合力が試される ソフトウェア開発に 直接的に役立つ
2024/12/15 8 競技プログラミングで求められるスキル 数学的思考力・プログラミング力・正確性が求められる 数学的思考力 問題文から本質を見つけ、 適切に簡略化する力 自然言語で書かれた要件を 簡潔な条件に読み替えて 実装しやすいようにまとめる
要件整理や解決アイデアの 着想に役立つ 正確性 問題文を正確に読み プログラムをバグなく 適切に実装する力 精度と速度のバランス感覚 や実装テクニック、経験などを 活用し高い精度を実現する 人生のあらゆる場面で 役に立つ プログラミング力 プログラムを 素早く実装する力 タイピング速度の向上や 文法への理解など 総合力が試される ソフトウェア開発に 直接的に役立つ
2024/12/15 9 実際に出てくる問題例: 区間和 問題 数列が与えられます。 以下の質問が複数個与えられるので、全て処理してください。 • 質問: 〇
番目から △ 番目までの数字の総和を答えてください。 2 5 3 4 9 7 4 1 数列 2番目~4番目 5+3+4 = 12 4番目~7番目 4+9+7+4 = 24 質問 一見簡単に見えるが・・・?
2024/12/15 10 定義通りの解法 問題文の通りにプログラムを書くと、実行速度が遅いプログラムとなる 2 5 4 1 数列 …
200万個の数字 質問 … 100万個の質問 計算量 100万個の質問 (質問ごとにおおよそ) 100万回の足し算 x 1兆回の足し算 = 数時間ほどかかりそうな計算量。 もう少しマシな方法はないか?
2024/12/15 11 解法: 累積和 予め先頭からの総和を求めておくことで素早く処理できる 2 5 3 4 9
7 4 1 元の数列 累積和数列 0 2 7 10 14 23 30 34 35
2024/12/15 12 解法: 累積和 予め先頭からの総和を求めておくことで素早く処理できる 元の数列 累積和数列 0 2 7
10 14 23 30 34 35 2 5 3 4 9 7 4 1 質問 2番目~4番目 14 - 2 = 12 1番目~4番目 14 1番目 2
2024/12/15 13 解法: 累積和 予め先頭からの総和を求めておくことで素早く処理できる 元の数列 累積和数列 0 2 7
10 14 23 30 34 35 2 5 3 4 9 7 4 1 質問 4番目~7番目 34 - 10 = 24 1番目~7番目 34 1番目~3番目 10 累積和を求めておけば たった1回の引き算で 答えが求まる。 計算量を議論するのが 競技プログラミングの 楽しみの一つ
2024/12/15 14 競技プログラミングで求められるスキル 数学的思考力・プログラミング力・正確性が求められる 数学的思考力 問題文から本質を見つけ、 適切に簡略化する力 自然言語で書かれた要件を 簡潔な条件に読み替えて 実装しやすいようにまとめる
要件整理や解決アイデアの 着想に役立つ 正確性 問題文を正確に読み プログラムをバグなく 適切に実装する力 精度と速度のバランス感覚 や実装テクニック、経験などを 活用し高い精度を実現する 人生のあらゆる場面で 役に立つ プログラミング力 プログラムを 素早く実装する力 タイピング速度の向上や 文法への理解など 総合力が試される ソフトウェア開発に 直接的に役立つ
2024/12/15 15 実装テクニック: 区間の扱い方 区間は半開区間で扱うと楽に実装できる 数直線 半開区間 の世界 1 ≤
𝑥 < 3 3 ≤ 𝑥 < 5 1 3 5 閉区間 の世界 1 ≤ 𝑥 ≤ 3 3 ≤ 𝑥 ≤ 5 右側の端点を区間に含めない
2024/12/15 16 実装テクニック: 区間の扱い方 区間は半開区間で扱うと楽に実装できる 足し算 数直線 半開区間 の世界 1
≤ 𝑥 < 3 3 ≤ 𝑥 < 5 1 ≤ 𝑥 < 5 𝑥 = 3 での区間重複がない 1 3 5 閉区間 の世界 1 ≤ 𝑥 ≤ 3 3 ≤ 𝑥 ≤ 5 1 ≤ 𝑥 ≤ 5 と 𝑥 = 3 𝑥 = 3 での区間重複
2024/12/15 17 実用例: 二分探索 二分探索も半開区間で書くと短く書ける int key = 8; //
検索したい数字 int bot = 0; int top = n-1; while (bot <= top - 1) { int mid = (bot + top) / 2; if (a[mid] == key) { bot = mid; break; } else if (a[mid] > key) { top = mid - 1; } else { bot = mid + 1; } } 閉区間 場合分けが多い 添字に+1,-1が出てきて面倒
2024/12/15 18 実用例: 二分探索 二分探索も半開区間で書くと短く書ける int key = 8; //
検索したい数字 int bot = 0; int top = n; while (abs(bot - top) > 1) { int mid = (bot + top) / 2; if (array[mid] <= key) bot = mid; else top = mid; } int key = 8; // 検索したい数字 int bot = 0; int top = n-1; while (bot <= top - 1) { int mid = (bot + top) / 2; if (a[mid] == key) { bot = mid; break; } else if (a[mid] > key) { top = mid - 1; } else { bot = mid + 1; } } 閉区間 半開区間 場合分けが減った 添字が簡潔になった
• イントロダクション • 競技プログラミングの面白さ • 競技プログラミングとコミュニティ ◦ ICPCコミュニティ ◦ AtCoderコミュニティ
◦ 阪大の活動 • 競技プログラミングと外部のつながり • まとめ 2024/12/15 19 もくじ
2024/12/15 20 競技プログラミングの形態 コンテスト時間と解の評価指標が違う2タイプがある アルゴリズム部門 ICPC AtCoder CodeForces ヒューリスティック部門 AtCoder
ICPC CodinGame 代表例 競技時間 短め (2時間~5時間) 長め (8時間~2週間) 問題の要求 厳密解 (必要十分な解を早く作る) 近似解 (良い解を作る)
2024/12/15 21 ICPCとは? International Collegiate Programming Contest 国際 大学対抗 プログラミング
コンテスト
2024/12/15 22 ICPCの特徴 3人1チームで戦うチーム戦 チーム戦 PCは1つ 公平性 同大学の3人1チームで 協力して戦うチーム戦 個人戦の要素に
+α で チームワークや 協力要素が含まれる 5時間の長丁場なので 体力管理や食事休憩の タイミングも重要 予選参加の足切りはなく コンテストに誰でも参加可能 本番でよい成績を残せば どんなチームでも次の コンテストに出られる 逆に悪い成績を取っても 他のチームに悪い影響を 及ぼすことはない チームで1台のPCを 共有して使う PCに触れない時間が多いため 実装方針の立案や 数理構造の考察の 重要性が高い 順位付けルールの仕組みから、 序盤のテンポが勝負を分ける
2024/12/15 23 ICPCの仕組み 4段階の大会があり、勝ち抜くことで次の大会に出られる仕組み ICPC World Finals Asia Pacific Playoff
横浜 台湾など 日本 世界大会 エリア別 決勝大会 エリア別 予選大会 他7地域それぞれ Playoff 国別 予選 台湾 韓国 ベトナムなど … … … …
2024/12/15 24 ICPCの雰囲気 各国の大学などで開催され和やかな雰囲気 左2つのベトナムでの写真の出典: https://drive.google.com/drive/folders/1RYPtJuZVGT5FtlldyTq-dgR3pMcOph7X
• コンテスト中は生配信 + 順位表公開 ◦ あなたの「推し」チームを応援しよう ◦ コーチたちによる解説もある • 直近の横浜大会の情報
◦ 日時: 12/22(日) 09:30 – 15:30 ◦ 順位表: https://icpcsec.firebaseapp.com/ ◦ 配信もある ◦ おおよそ15位以上で次の大会に進める 2024/12/15 25 観戦の楽しみ 観戦も楽しい。まずは様子を見てみませんか? 生配信 結果発表 (Yes/No) 写真の切り抜き元: https://www.youtube.com/watch?v=5LdrFxifW54
• 略称: JAG (Japanese Alumni Group) • 日本特有のユーザ主導型コミュニティ ◦ 模擬予選などのサービスをJAGが提供
◦ 本番コンテストの運営にも関わる • 来年度の活動に向けてスタッフ募集中 ◦ ICPC経験は関係なし ◦ メーリングリストだけの様子見もできます 2024/12/15 26 ICPC OB/OGの会について ICPC支援に興味がある方はJAGに入りましょう! 写真の引用: https://icpc.iisf.or.jp/2022-yokohama/asia-yokohama-regional-contest-2022/
2024/12/15 27 競技プログラミングの形態 コンテスト時間と解の評価指標が違う2タイプがある アルゴリズム部門 ICPC AtCoder CodeForces ヒューリスティック部門 AtCoder
ICPC CodinGame 代表例 競技時間 短め (2時間~5時間) 長め (8時間~2週間) 問題の要求 厳密解 (必要十分な解を早く作る) 近似解 (良い解を作る)
2024/12/15 28 AtCoder 簡単なものから難しいものまでバランスよく揃う Beginner Contest Regular Contest Grand Contest
初心者でも気軽に 参加できるコンテスト 7問100分で 簡単な問題も多いため 演習にピッタリ 中級者以降でも 問題を解く爽快感がある 頂上決戦用の 最高難易度コンテスト 6問180分で 極めて難しい問題が並ぶ 問題の品質面について 上級者から 絶大な信頼がある 難易度が高い問題が多い 中上級者向けのコンテスト 5問120分で ほどよく難しい問題が並ぶ Ad-hocな問題も多く BeginnerとGrandの橋渡し をする役割のコンテスト 毎週土曜日 21:00 – 22:40 毎月1回 日曜日 21:00 – 24:00 毎月2回 日曜日 21:00 – 23:00 裏メニュー 99%は大満足の内容。 興味があればまずは過去問を見よう。
2024/12/15 29 競技プログラミングの形態 コンテスト時間と解の評価指標が違う2タイプがある アルゴリズム部門 ICPC AtCoder CodeForces ヒューリスティック部門 AtCoder
ICPC CodinGame 代表例 競技時間 短め (2時間~5時間) 長め (8時間~2週間) 問題の要求 厳密解 (必要十分な解を早く作る) 近似解 (良い解を作る)
2024/12/15 30 ヒューリスティックコンテスト いわゆる「普通の」コンテスト。Kaggleやコンペ系もこちら寄り 問題例 特徴 • エリアを低コストでカバーできるよう放送局の出力強度を決める (AHC020) •
共通部分を最大化しながらしりとりをする (AHC028) • 植物の種の交配計画を立てる (AHC035) • なるべく良い近似解を求めるコンテスト • 出題問題は多くの場合で厳密解が求めづらい テクニック • とりあえず 貪欲 + 焼きなまし法 • 解を少し変える近傍遷移を考察 • 評価関数を変更する • モンテカルロ法: ランダムに計算した結果を集計して意思決定
2024/12/15 31 AtCoderと実力指標 コンテストに参加すると、実力を示すレートが付く kotamanegi KowerKoint
• 今年度のICPC戦績 ◦ 国内予選 • 阪大からの参加チーム 9チーム • 横浜大会進出 2チーム(5位・14位/354チーム)
◦ 台湾大会 1チーム参加・Playoff進出予定(24位/110チーム) ◦ 横浜大会参加の2チームにもご期待ください • AtCoderなど他のコンテストにも参加 ◦ 第五回日本最強プログラマー学生選手権: 4人 大学別ランキングで同率3位* (東大16人、東工大9人、東北大4人) ◦ コンテストの後には部内で感想戦をしています 2024/12/15 32 阪大の取り組み①: コンテスト参加 ICPCをはじめとして様々なコンテストに参加している 阪大情報科学研究科とIISFからは 場所の提供・旅費その他の支援をいただき 大変助かっております *@potato167_longさんの分析に基づく。 … 合計84人 (Osaka University)
• 昨年度はOUPC2023を開催 ◦ 1/6-7 大阪大学中之島センター ◦ 参加者70人 ◦ Day1 阪大セット
/ Day2 北大セット • 今年度もOUPC2024を開催 ◦ 3/15-16 大阪大学中之島センター ◦ 参加をお待ちしております 2024/12/15 33 阪大の取り組み②: OUPCと大学連携 競技プログラミング部「RAINBOU」として、 OUPCなど外部との連携も積極的に行っている 会場を提供してくださる 大阪大学ありがとうございます
• イントロダクション • 競技プログラミングの面白さ • 競技プログラミングとコミュニティ • 競技プログラミングと外部のつながり ◦ 企業での活動
• まとめ 2024/12/15 34 もくじ
2024/12/15 35 産業活用 – ALGO ARTIS社の例 コンテストで培った技術で、社会インフラを最適化 *COI開示: 青山はALGO ARTIS社より給与を受け取っています。
この発表やスライドは所属組織を代表するものではありません。 東北電力様: 配船計画 日本触媒様: 生産計画 関西電力様: タンク繰り
2024/12/15 36 ALGO ARTISと競プロ 競プロ技術を活かしてヒューリスティック最適化を実装! ALGO ARTIS Impact Report 2024
より 問題特性を掴むことが 性能向上のために不可欠。 競プロで学んだ試行錯誤力が役立つ。 この発表やスライドは所属組織を代表するものではありません。
2024/12/15 37 まとめ 競技プログラミングは楽しいです! あなたも始めてみませんか? 競技プログラミングの楽しさ 競技プログラミングの嬉しさ 計算量を考えること パソコンに向き合えること 交流と協力
競争、そして成長 国際的コミュニティへの貢献 スキルの証明 プログラミング力の向上 楽しい
• 本スライド中に利用されているアイコンはMaterial Design Iconを含みます。 ◦ https://github.com/google/material-design-icons/tree/master ◦ Apache License 2.0の元でライセンスされています
• 本資料の内容は個人の見解に基づくものであり、所属組織を代表するものではありません。 2024/12/15 38 ライセンス表記など