Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
JOI2015-2016 春合宿 day 2 Sandwich 解説
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
snuke
March 21, 2016
Education
330
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JOI2015-2016 春合宿 day 2 Sandwich 解説
おからは栄養"満点"らしいです。
snuke
March 21, 2016
Transcript
30 slides
サンドイッチ (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 巫⼥女女さんのイラスト おからのイラスト
More Decks by snuke
See All by snuke
puzzleLT.pdf
snuke
0
760
JOI2015-sp-day4-walls-anothersolution
snuke
0
260
JOI2014 春合宿 day 2 スタンプラリー 解説
snuke
0
230
NPCA合宿きょーぷろ講義
snuke
0
380
JOI 2013 春合宿 day4-1 messenger 解説
snuke
0
390
CodeForces#162 Div1-E
snuke
0
380
CodeForces162 Div1-E
snuke
3
16k
SRM 555 Div 1 easy, Div 2 medium
snuke
1
490
SRM 555 Div 1 hard
snuke
1
610
Other Decks in Education
See All in Education
検定資格の価値 ~実はすごいよQC検定~
bunnchinn3
0
280
AI活用の基礎体験ハンズオン(松尾研 AXエバンジェリスト講座)
minorun365
PRO
12
15k
Requirements Analysis and Prototyping - Lecture 3 - Human-Computer Interaction (1023841ANR)
signer
PRO
0
1.9k
The Dirty Dozen: 12 gala mistakes you don’t know you’re making
auctria
PRO
0
260
Session 6 - Mass Communication
adeputra13
0
230
Session 3 - Diplomasi
adeputra13
0
440
Komunikasi Massa: 11 Teori Kunci Komunikasi Massa
adeputra13
0
160
Sekolah Sabat - Triwulan 3 2026 - Pelajaran 13
hiola
0
11k
SANG PENCIPTA BERBICARA (01ABSG-Q4-2026)
ssmedikasda
0
570
CSS3 and Responsive Web Design - Lecture 5 - Web Technologies (1019888BNR)
signer
PRO
1
3.5k
Sekolah Sabat - Triwulan 4 2026 - Pelajaran 2
hiola
0
11k
Sekolah Sabat - Triwulan 4 2026 - Pelajaran 7
hiola
0
3.3k
Featured
See All Featured
Reflections from 52 weeks, 52 projects
jeffersonlam
356
22k
The World Runs on Bad Software
bkeepers
PRO
72
12k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
350
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
48k
Tell your own story through comics
letsgokoyo
1
1.1k
The SEO Collaboration Effect
kristinabergwall1
1
620
ラッコキーワード サービス紹介資料
rakko
5
5.8M
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
560
How to train your dragon (web standard)
notwaldorf
96
6.9k
Chasing Engaging Ingredients in Design
codingconduct
0
390
Joys of Absence: A Defence of Solitary Play
codingconduct
1
570
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
2
2.1k