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
AOJ 0112 A Milk Shop 解説
Search
kagamiz
March 28, 2013
Programming
0
460
AOJ 0112 A Milk Shop 解説
OkNCT-ICT 2013 春合宿 Day 4 (らしい) に解説したもの.
kagamiz
March 28, 2013
Tweet
Share
More Decks by kagamiz
See All by kagamiz
KCS v2. の開発
kagamiz
0
260
internship final presentation
kagamiz
0
1.3k
internship-middle term presentation
kagamiz
0
1.1k
すうがくのまほう
kagamiz
0
350
ご当地料理の紹介
kagamiz
0
430
オンラインジャッジシステムの実装
kagamiz
0
1.2k
AOJ 0022 Maximum Sum Sequence 解説
kagamiz
1
1.5k
AOJ 0557 A First Grader 解説
kagamiz
0
980
JOI2013 本選1 Illumination 解説
kagamiz
0
360
Other Decks in Programming
See All in Programming
250830 IaCの選定~AWS SAMのLambdaをECSに乗り換えたときの備忘録~
east_takumi
0
390
2025 年のコーディングエージェントの現在地とエンジニアの仕事の変化について
azukiazusa1
24
12k
Vue・React マルチプロダクト開発を支える Vite
andpad
0
110
Swift Updates - Learn Languages 2025
koher
2
480
意外と簡単!?フロントエンドでパスキー認証を実現する WebAuthn
teamlab
PRO
2
750
請來的 AI Agent 同事們在寫程式時,怎麼用 pytest 去除各種幻想與盲點
keitheis
0
120
複雑なフォームに立ち向かう Next.js の技術選定
macchiitaka
2
120
はじめてのMaterial3 Expressive
ym223
2
400
Cache Me If You Can
ryunen344
2
740
Reading Rails 1.0 Source Code
okuramasafumi
0
220
Improving my own Ruby thereafter
sisshiki1969
1
160
Flutter with Dart MCP: All You Need - 박제창 2025 I/O Extended Busan
itsmedreamwalker
0
150
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
30
9.7k
The Language of Interfaces
destraynor
161
25k
For a Future-Friendly Web
brad_frost
180
9.9k
The Cult of Friendly URLs
andyhume
79
6.6k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
What's in a price? How to price your products and services
michaelherold
246
12k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Making the Leap to Tech Lead
cromwellryan
135
9.5k
Rails Girls Zürich Keynote
gr2m
95
14k
Transcript
AOJ 0112 A Milk Shop 解説 @kagamiz
問題の概要 • n 人のお客さんがいます. • i 番目の人がミルクを入れるのにはai 分の時間がかかりま す. •
1 度に1 人の人がミルクを入れられるとき, 待ち時間の合計 を最小化してください.
問題文の復習 客の番号 ミルクを入れる時間 かかる待ち時間 客1 2 分 0 分 客2
6 分 2 分 客3 4 分 2 分 + 6 分 客4 3 分 2 分 + 6 分 + 4 分 客5 9 分 2 分 + 6 分 + 4 分 + 3 分 合計 37 分
問題文の復習 • 2 番目の人と3 番目の人を入れ替えてみる 客の番号 ミルクを入れる時間 かかる待ち時間 客1 2
分 0 分 客2 6 分 2 分 客3 3 分 2 分 + 6 分 客4 4 分 2 分 + 6 分 + 3 分 客5 9 分 2 分 + 6 分 + 3 分 + 4 分 合計 35 分
問題文の復習 • 昇順にすると爆速になりそう 客の番号 ミルクを入れる時間 かかる待ち時間 客1 2 分 0
分 客2 3 分 2 分 客3 4 分 2 分 + 3 分 客4 6 分 2 分 + 3 分 + 4 分 客5 9 分 2 分 + 3 分 + 4 分 + 6 分 合計 31 分
( ^o^) 昇順にすると爆速になりそう
( ^o^) 昇順にすると爆速になりそう • ( ⊖ ) ˘ ˘ 。o(まてよ,
なんでそれでいいんだろう)
( ^o^) 昇順にすると爆速になりそう • ( ⊖ ) ˘ ˘ 。o(まてよ,
なんでそれでいいんだろう) • |とりあえずSubmit| ┗(☋` )┓三
( ^o^) 昇順にすると爆速になりそう • ( ⊖ ) ˘ ˘ 。o(まてよ,
なんでそれでいいんだろう) • |とりあえずSubmit| ┗(☋` )┓三 • ( ) ◠‿◠ ☛Wrong Answer
( ^o^) 昇順にすると爆速になりそう • ( ⊖ ) ˘ ˘ 。o(まてよ,
なんでそれでいいんだろう) • |とりあえずSubmit| ┗(☋` )┓三 • ( ) ◠‿◠ ☛Wrong Answer • ▂▅▇█▓▒░(’ω’) █▇▅▂ ░▒▓ うわあああああああ
( ^o^) 昇順にすると爆速になりそう • ( ⊖ ) ˘ ˘ 。o(まてよ,
なんでそれでいいんだろう) • |とりあえずSubmit| ┗(☋` )┓三 • ( ) ◠‿◠ ☛Wrong Answer • ▂▅▇█▓▒░(’ω’) █▇▅▂ ░▒▓ うわあああああああ • 最悪のケースを考えてみよう
最悪のケース • 10000 人のお客さんがそれぞれ60 分ずつ待つときが最悪 の待ち時間になる. • その時にかかる待ち時間の合計は, n 番目の人は(n
– 1) * 60 分待たないといけないので, Σ[i = 1, 10000] (i – 1) * 60 = 2999700000 分 となる. • しかしint 型で表せる数の最大値は2147483647 なので, int 型で総和を求めるとWrong Answer となる. => 直すとAC
やっぱり昇順でいれるのが最適? • “しかしint 型で表せる数の最大値は2147483647 なので, int 型で総和を求めるとWrong Answer となる.=>直すと AC”
• こういう風に, 貪欲的に「その場での最善」を選択してい くことを繰り返すアルゴリズムを貪欲法という. • ここでは, なぜ貪欲法でうまくいくかを簡単に証明.
問題文の復習[再掲] • 昇順にすると爆速になりそう 客の番号 ミルクを入れる時間 かかる待ち時間 客1 2 分 0
分 客2 3 分 2 分 客3 4 分 2 分 + 3 分 客4 6 分 2 分 + 3 分 + 4 分 客5 9 分 2 分 + 3 分 + 4 分 + 6 分 合計 31 分
問題の言い換え • i 番目の人は, 待ち時間に(n – i) 回作用する. • つまり,
n 次元ベクトル a = (a1, a2, …, an), b = (n – 1, n – 2, …, 1, 0) としたとき, それぞれの成分を入れ替えて内積a ・ b を最小化する問題 となる.
問題の言い換え • a の各成分を昇順に入れ替えたベクトルをa', b は成分が 降順にならんだベクトルとすると, 次の並べ替え不等式が 成立する. a'・
b ≦ a ・ b (≦ a'' ・ b) • ここで, a'' は a の各成分を降順に並び替えたベクトル.
証明の概略 • a とb の各成分の個数が2 個だとする. • このとき, a1 ≦
a2, b1 ≦ b2 とすると • a1 b1 + a2b2 – (a1b2 + a2b1) = (a1 – a2)(b1 – b2)≧0 ∴a1b1 + a2b2 ≧ a1b2 + a2b1 • 各成分がn 個ある時も, ベクトルの2 つの成分に注目して同じ事 を行えば良い.