Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
470
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
270
internship final presentation
kagamiz
0
1.3k
internship-middle term presentation
kagamiz
0
1.1k
すうがくのまほう
kagamiz
0
360
ご当地料理の紹介
kagamiz
0
460
オンラインジャッジシステムの実装
kagamiz
0
1.2k
AOJ 0022 Maximum Sum Sequence 解説
kagamiz
1
1.6k
AOJ 0557 A First Grader 解説
kagamiz
0
990
JOI2013 本選1 Illumination 解説
kagamiz
0
370
Other Decks in Programming
See All in Programming
新卒エンジニアのプルリクエスト with AI駆動
fukunaga2025
0
230
20 years of Symfony, what's next?
fabpot
2
360
tparseでgo testの出力を見やすくする
utgwkk
2
230
Socio-Technical Evolution: Growing an Architecture and Its Organization for Fast Flow
cer
PRO
0
360
エディターってAIで操作できるんだぜ
kis9a
0
730
大体よく分かるscala.collection.immutable.HashMap ~ Compressed Hash-Array Mapped Prefix-tree (CHAMP) ~
matsu_chara
2
220
【CA.ai #3】Google ADKを活用したAI Agent開発と運用知見
harappa80
0
320
リリース時」テストから「デイリー実行」へ!開発マネージャが取り組んだ、レガシー自動テストのモダン化戦略
goataka
0
130
sbt 2
xuwei_k
0
300
バックエンドエンジニアによる Amebaブログ K8s 基盤への CronJobの導入・運用経験
sunabig
0
160
Cell-Based Architecture
larchanjo
0
130
Flutter On-device AI로 완성하는 오프라인 앱, 박제창 @DevFest INCHEON 2025
itsmedreamwalker
1
110
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
9
710
Fireside Chat
paigeccino
41
3.7k
Building Applications with DynamoDB
mza
96
6.8k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
4 Signs Your Business is Dying
shpigford
186
22k
GitHub's CSS Performance
jonrohan
1032
470k
Rails Girls Zürich Keynote
gr2m
95
14k
Documentation Writing (for coders)
carmenintech
76
5.2k
Making Projects Easy
brettharned
120
6.5k
Scaling GitHub
holman
464
140k
We Have a Design System, Now What?
morganepeng
54
7.9k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.6k
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 つの成分に注目して同じ事 を行えば良い.