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
320
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JOI2015-2016 春合宿 day 2 Sandwich 解説
おからは栄養"満点"らしいです。
snuke
March 21, 2016
More Decks by snuke
See All by snuke
puzzleLT.pdf
snuke
0
740
JOI2015-sp-day4-walls-anothersolution
snuke
0
260
JOI2014 春合宿 day 2 スタンプラリー 解説
snuke
0
230
NPCA合宿きょーぷろ講義
snuke
0
370
JOI 2013 春合宿 day4-1 messenger 解説
snuke
0
390
CodeForces#162 Div1-E
snuke
0
360
CodeForces162 Div1-E
snuke
3
16k
SRM 555 Div 1 easy, Div 2 medium
snuke
1
470
SRM 555 Div 1 hard
snuke
1
590
Other Decks in Education
See All in Education
2026年度春学期 統計学 第13回 不確かな測定の不確かさを測る ― 不偏分散とt分布 (2026. 6. 25)
akiraasano
PRO
1
130
Case Studies and Future Research - Lecture 12 - Next Generation User Interfaces (4018166FNR)
signer
PRO
0
200
Examen de Selectividad. Geografía julio 2026 (Convocatoria Extraordinaria). UCLM
juanmartin2026
1
9.8k
[2026前期火5] 論理学(京都大学文学部 前期 第11回)「ハーモニー:三層モデルと保存拡大」
yatabe
0
190
Throw Yourself In! - How I've learned English and What I'm Facing
georgeorge
1
190
면접관 눈에 띄는 데이터 분석 포트폴리오 만드는 법 | 2026년 5월 세미나
datarian
0
920
Visionary Initiative: Future Intelligence 「未来の知性と社会の礎を築く」|Science Tokyo(東京科学大学)
sciencetokyo
PRO
0
960
AI-Based Speaking Assessment of a Short-Term Study Abroad Program
uranoken
0
380
2026年度春学期 統計学 第10回 分布の推測とは - 標本調査,度数分布と確率分布 (2026. 6. 4)
akiraasano
PRO
0
160
Gitがない時代 インターネットがない時代の 開発話
sapi_kawahara
0
330
BITCOIN : Les fondamentaux !
rlifchitz
0
200
View Manipulation and Reduction - Lecture 9 - Information Visualisation (4019538FNR)
signer
PRO
1
2.8k
Featured
See All Featured
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
Claude Code のすすめ
schroneko
67
230k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
2.1k
Chasing Engaging Ingredients in Design
codingconduct
0
240
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
150
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
190
Six Lessons from altMBA
skipperchong
29
4.3k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.5k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
WCS-LA-2024
lcolladotor
0
750
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 巫⼥女女さんのイラスト おからのイラスト