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
AOJ 0112 A Milk Shop 解説
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
kagamiz
March 28, 2013
Programming
480
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AOJ 0112 A Milk Shop 解説
OkNCT-ICT 2013 春合宿 Day 4 (らしい) に解説したもの.
kagamiz
March 28, 2013
More Decks by kagamiz
See All by kagamiz
KCS v2. の開発
kagamiz
0
290
internship final presentation
kagamiz
0
1.4k
internship-middle term presentation
kagamiz
0
1.2k
すうがくのまほう
kagamiz
0
390
ご当地料理の紹介
kagamiz
0
500
オンラインジャッジシステムの実装
kagamiz
0
1.2k
AOJ 0022 Maximum Sum Sequence 解説
kagamiz
1
1.6k
AOJ 0557 A First Grader 解説
kagamiz
0
1k
JOI2013 本選1 Illumination 解説
kagamiz
0
420
Other Decks in Programming
See All in Programming
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
240
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
240
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
7
2.8k
テストを司るデーモンに会いに行く 〜隔離した仮想マシンでテストを通すまで〜
h1d3mun3
1
180
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
140
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
0
200
業務時間外もAIに働いてもらう話
colorful12
3
10k
更なる可用性を求めて、5年間運用したKotlinのアプリケーションをGoでリプレイスする話
ken_tunc
0
100
XHTMLが残したもの
yosuke_furukawa
PRO
2
710
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
350
デプロイ直後のレイテンシスパイクを調べたら、 Railsの仕様にたどり着いた
nhsykym
0
120
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.5k
Featured
See All Featured
The untapped power of vector embeddings
frankvandijk
2
1.9k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
780
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
410
GitHub's CSS Performance
jonrohan
1033
470k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
370
HDC tutorial
michielstock
2
860
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
350
Code Review Best Practice
trishagee
74
20k
A Soul's Torment
seathinner
7
3.6k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
530
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 つの成分に注目して同じ事 を行えば良い.