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
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
250
JOI2014 春合宿 day 2 スタンプラリー 解説
snuke
0
230
NPCA合宿きょーぷろ講義
snuke
0
370
JOI 2013 春合宿 day4-1 messenger 解説
snuke
0
380
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
580
Other Decks in Education
See All in Education
Lectura 2 (PIT : Python Basico)
robintux
0
250
Info Session MSc Computer Science & MSc Applied Informatics
signer
PRO
0
270
[2026前期火5] 論理学(京都大学文学部 前期 第5回)「 ならばの問題演習・proof net・かつの規則」
yatabe
0
180
アジャイルなマインドセットを「取り戻す」新人研修づくり
chinmo
2
540
【セーフィー】テクニカルライティング&コミュニケーション実践講座(26新卒エンジニア向け研修資料)
ymzaki_m4
0
140
Alumnote inc. Company Deck
yukinumata
1
18k
反応する前に「受容する」力を鍛える。 自分の安全地帯🌱 を育てよう / Cultivating and sharing ventral vagal safety.
spring_aki
0
170
生成AI時代のエンジニア育成について考えてみた
akasan
0
100
0318
cbtlibrary
0
130
Managing Complexity: India’s Semiconductor Ambitions & New Industrial Policy
vyadav
0
150
[2026前期火5] 論理学(京都大学文学部 前期 第2回)「論理的な正しさはどこにあるのか」
yatabe
0
870
Measuring what matters
jonoalderson
0
320
Featured
See All Featured
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9k
HDC tutorial
michielstock
2
660
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
290
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
230
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
810
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
The SEO identity crisis: Don't let AI make you average
varn
0
460
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
10k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
How to make the Groovebox
asonas
2
2.2k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
230
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 巫⼥女女さんのイラスト おからのイラスト