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
JOI2015-2016 春合宿 day 2 Sandwich 解説
Search
snuke
March 21, 2016
Education
0
320
JOI2015-2016 春合宿 day 2 Sandwich 解説
おからは栄養"満点"らしいです。
snuke
March 21, 2016
Tweet
Share
More Decks by snuke
See All by snuke
puzzleLT.pdf
snuke
0
730
JOI2015-sp-day4-walls-anothersolution
snuke
0
250
JOI2014 春合宿 day 2 スタンプラリー 解説
snuke
0
220
NPCA合宿きょーぷろ講義
snuke
0
360
JOI 2013 春合宿 day4-1 messenger 解説
snuke
0
380
CodeForces#162 Div1-E
snuke
0
350
CodeForces162 Div1-E
snuke
3
16k
SRM 555 Div 1 easy, Div 2 medium
snuke
1
470
SRM 555 Div 1 hard
snuke
1
570
Other Decks in Education
See All in Education
タイムマシンのつくりかた
nomizone
3
1k
Multimodal Interaction - Lecture 3 - Next Generation User Interfaces (4018166FNR)
signer
PRO
0
2k
2026 Medicare 101 Presentation
robinlee
PRO
0
160
TypeScript初心者向け完全ガイド
mickey_kubo
1
150
滑空スポーツ講習会2025(実技講習)EMFT講習 実施要領/JSA EMFT 2025 procedure
jsaseminar
0
130
子どものためのプログラミング道場『CoderDojo』〜法人提携例〜 / Partnership with CoderDojo Japan
coderdojojapan
PRO
4
18k
学習指導要領と解説に基づく学習内容の構造化の試み / Course of study Commentary LOD JAET 2025
masao
1
140
Activité_5_-_Les_indicateurs_du_climat_global.pdf
bernhardsvt
0
190
GOBUSATA紹介
chankawa919
0
120
1216
cbtlibrary
0
160
悩める リーダー達に 届けたい書籍|レジリエントマネジメント 書籍イントロダクション-260126
mimoza60
1
390
栃木県警サイバーセキュリティ研修会2026
nomizone
0
310
Featured
See All Featured
The Curse of the Amulet
leimatthew05
1
9.6k
[SF Ruby Conf 2025] Rails X
palkan
2
810
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
The Cult of Friendly URLs
andyhume
79
6.8k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
80
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
63
53k
Building an army of robots
kneath
306
46k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.2k
Automating Front-end Workflow
addyosmani
1370
200k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
110
Transcript
サンドイッチ (Sandwich) 解説 JOI 2016 春合宿 day2 snuke
問題概要 • R⾏行行C列列のマス⽬目にサンドイッチが並んでいる • 斜辺または他の⼆二辺が空いてるサンドイッチは取れる • 各マスについて、そのマスのサンドイッチを両⽅方取るた めに取る必要のあるサンドイッチの個数の最⼩小値は?
問題概要 • R⾏行行C列列のマス⽬目にサンドイッチが並んでいる • 斜辺または他の⼆二辺が空いてるサンドイッチは取れる • 各マスについて、そのマスのサンドイッチを両⽅方取るた めに取る必要のあるサンドイッチの個数の最⼩小値は?
問題概要 • R⾏行行C列列のマス⽬目にサンドイッチが並んでいる • 斜辺または他の⼆二辺が空いてるサンドイッチは取れる • 各マスについて、そのマスのサンドイッチを両⽅方取るた めに取る必要のあるサンドイッチの個数の最⼩小値は?
問題概要 • R⾏行行C列列のマス⽬目にサンドイッチが並んでいる • 斜辺または他の⼆二辺が空いてるサンドイッチは取れる • 各マスについて、そのマスのサンドイッチを両⽅方取るた めに取る必要のあるサンドイッチの個数の最⼩小値は?
問題概要 • R⾏行行C列列のマス⽬目にサンドイッチが並んでいる • 斜辺または他の⼆二辺が空いてるサンドイッチは取れる • 各マスについて、そのマスのサンドイッチを両⽅方取るた めに取る必要のあるサンドイッチの個数の最⼩小値は?
問題概要 • R⾏行行C列列のマス⽬目にサンドイッチが並んでいる • 斜辺または他の⼆二辺が空いてるサンドイッチは取れる • 各マスについて、そのマスのサンドイッチを両⽅方取るた めに取る必要のあるサンドイッチの個数の最⼩小値は?
問題概要 • R⾏行行C列列のマス⽬目にサンドイッチが並んでいる • 斜辺または他の⼆二辺が空いてるサンドイッチは取れる • 各マスについて、そのマスのサンドイッチを両⽅方取るた めに取る必要のあるサンドイッチの個数の最⼩小値は?
問題概要 • R⾏行行C列列のマス⽬目にサンドイッチが並んでいる • 斜辺または他の⼆二辺が空いてるサンドイッチは取れる • 各マスについて、そのマスのサンドイッチを両⽅方取るた めに取る必要のあるサンドイッチの個数の最⼩小値は?
問題概要 • R⾏行行C列列のマス⽬目にサンドイッチが並んでいる • 斜辺または他の⼆二辺が空いてるサンドイッチは取れる • 各マスについて、そのマスのサンドイッチを両⽅方取るた めに取る必要のあるサンドイッチの個数の最⼩小値は?
問題概要 • R⾏行行C列列のマス⽬目にサンドイッチが並んでいる • 斜辺または他の⼆二辺が空いてるサンドイッチは取れる • 各マスについて、そのマスのサンドイッチを両⽅方取るた めに取る必要のあるサンドイッチの個数の最⼩小値は?
⼩小課題 1 (35点) • ⽬目的の2個のサンドイッチの取り⽅方は2通りある (A) 上側のサンドイッチを先にとって下側を次に取る (B) 下側のサンドイッチを先にとって上側を次に取る •
(A)についての最⼩小値が求められれば、(B)についても同 様な⽅方法で求めることができるので、(A)のみを考える 先 後
⼩小課題 1 (35点) • 上側のサンドイッチを取るためには、⾚赤マルの位置のサ ンドイッチを先に取らなければならない • このように「Xを取るためには先にYを取らなければい けない」という状況を、「XがYに依存している」と呼 ぶことにする
先 後
⼩小課題 1 (35点) • XがYに依存しているとき、X→Yという辺を貼ってみる • 辺が貼られたものを逆順に、取れるものから取っていけ ば緑のサンドイッチを取ることができる
⼩小課題 1 (35点) • このようにサイクルができる場合は取ることが出来ない
⼩小課題 1 (35点) • 各マスについて、(A),(B)パターンを試す – 依存関係を列列挙していき、辺を貼る – 辺が貼られたサンドイッチの個数を求める –
ただし、サイクルが存在する場合は取れないと判定する • 計算量量:O((RC)^2)
⼩小課題 1 (35点) • 具体的にどう計算するか – 単にbool visited[MAX_̲V]のような配列列で状態を管理理している と、「サイクル」なのか「単に2回訪れただけ」なのかが判定 できない
⼩小課題 1 (35点) • 具体的にどう計算するか – DFSを⽤用いると簡潔に実装できる int state[MAX_V]; //
0 で初期化 int dfs(int v) { if (state[v] == 1) return INF; if (state[v] == 2) return 0; state[v] = 1; int sum = 1; for (int u : to[v]) { int res = dfs(u); if (res == INF) return INF; sum += res; } state[v] = 2; return sum; }
実装の簡略略化 • サンドイッチが三⾓角形なのは扱いにくいので、マス単位 で考えることにする
実装の簡略略化 • サンドイッチが三⾓角形なのは扱いにくいので、マス単位 で考えることにする
実装の簡略略化 • マス⽬目の隣隣接関係を扱うときのテクニック – dx[] = {-‐‑‒1, 0, 1, 0},
dy[] = {0,-‐‑‒1,0,1} – for(v=0~∼3) nx = x+dx[v], ny = y+dy[v] • v という⽅方向でʻ‘Zʼ’のマスに⼊入ってきた時、そのマスから 貼る辺は v と v xor 1 の⽅方向のマス – ʻ‘Nʼ’のマスなら v と v xor 3 0 2 1 3
⼩小課題 2 (満点) • 列列ごとに考える • 列列の上から順に依存関係を計算していく
⼩小課題 2 (満点) • 列列ごとに考える • 列列の上から順に依存関係を計算していく
⼩小課題 2 (満点) • 列列ごとに考える • 列列の上から順に依存関係を計算していく
⼩小課題 2 (満点) • 列列ごとに考える • 列列の上から順に依存関係を計算していく • 依存関係の辺は単調増加!
⼩小課題 2 (満点) • 列列ごとに考える • 列列の上から順に依存関係を計算していく • 依存関係の辺は単調増加! –
上側のサンドイッチは必ず上⽅方向に依存しており、 上⽅方向に依存されたマスは上⽅方向に依存しているため
⼩小課題 2 (満点) • 列列ごとに、上から順に依存関係を計算する • 同じ列列内では依存関係を初期化をせずに計算していく • 依存関係の個数は⾼高々O(RC)なので、列列ごとにO(RC)で 計算でき、全体でO(RC*C)となる
⼩小課題 2 (満点) • 列列ごとに、上から順に依存関係を計算する • 同じ列列内では依存関係を初期化をせずに計算していく • 依存関係の個数は⾼高々O(RC)なので、列列ごとにO(RC)で 計算でき、全体でO(RC*C)となる
統計 0 35 100 15 4 1
統計 0 35 100 菩提樹の⽊木の下で悟りを開くブッダのイラスト 15 4 1 巫⼥女女さんのイラスト おからのイラスト