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
JOI2013 本選1 Illumination 解説
Search
kagamiz
March 29, 2013
Programming
430
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
JOI2013 本選1 Illumination 解説
OkNCT-ICT 2013 春合宿 Day 5 (らしい) で解説したもの.
kagamiz
March 29, 2013
More Decks by kagamiz
See All by kagamiz
KCS v2. の開発
kagamiz
0
300
internship final presentation
kagamiz
0
1.4k
internship-middle term presentation
kagamiz
0
1.2k
すうがくのまほう
kagamiz
0
390
ご当地料理の紹介
kagamiz
0
500
オンラインジャッジシステムの実装
kagamiz
0
1.3k
AOJ 0022 Maximum Sum Sequence 解説
kagamiz
1
1.6k
AOJ 0557 A First Grader 解説
kagamiz
0
1k
AOJ 0186 Aizu Chicken 解説
kagamiz
0
350
Other Decks in Programming
See All in Programming
Androidだけじゃない、DroidKaigiで広がった私の技術スタック
akkeylab
0
120
Kubernetes祭り #2 OP/ED
bells17
0
100
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
380
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
320
ジョジョの世界をXRで再現する
mofurune
0
140
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.5k
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
5k
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
160
The Rails Doctrine Decade
koic
2
520
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
110
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
500
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
21
21k
Featured
See All Featured
Practical Orchestrator
shlominoach
192
12k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
320
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
790
What's in a price? How to price your products and services
michaelherold
247
13k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
So, you think you're a good person
axbom
PRO
2
2.2k
Balancing Empowerment & Direction
lara
6
1.3k
WCS-LA-2024
lcolladotor
0
850
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.3k
New Earth Scene 8
popppiees
4
2.7k
Discover your Explorer Soul
emna__ayadi
2
1.3k
Transcript
JOI 2013 本選 1 Illumination 解説 @kagamiz
問題の概要 • 白黒で , 長さが N の電飾があります . ◦◦••◦•◦◦◦• •
ある区間を反転させて ( 反転させなくても良 い ), できるだけ長い交互列 ( 隣同士の色が 違う区間 ) を作りたい .
問題例の復習 ◦◦••◦•◦◦◦• ← これを長くしたい ◦◦•◦•◦•◦◦• • こう反転させると長さが 7 の交互列になる . ◦◦••◦•◦•◦•
• こうしても良い .
解答に移る前に • コンピュータはぱない機械ですが , 神では無 いので 1 秒あたりに処理できる命令に限度 があります .
• あるアルゴリズムで問題を解こうと考えたと きに , そのために必要な処理の回数を計算 量と言います ( 正確な定義ではない ).
アルゴリズムの計算量 • 計算量は , 通常「何に比例するか」で考えて , それをアルゴリズムのオーダーという . • 最初のうちはプログラム中のループの個数を
数えることが多く , たとえばループが 3 重 になっている箇所があれば O(N^3) 時間の アルゴリズムという .
アルゴリズムの計算量 • 計算量は , 通常「何に比例するか」で考えて , それをアルゴリズムのオーダーという . • アルゴリズムのオーダーが分かれば
, O(f(N)) の N に実際に N の最大値を入れてみて , 時間制限に間に合うか考えてみる . • 1 秒制限で f(N) ≦ 10^7 位なら大体 OK.
O(N^3) 時間のアルゴリズム • ◦◦••◦•◦◦◦• • 実際に切る場所を , 2 重ループで 2
つ決め打 ち . ← O(N^2) • その後に , その区間を反転して , 交互列の長 さの最大値を探す .← O(N) • 3 重ループなので合計 O(N^3).
O(N^3) 時間のアルゴリズム • 区間の反転は? • 前もって反転した配列を用意すると楽 .
( ^o^) 区間の反転はできた
( ^o^) 区間の反転はできた • ( ⊖ ) ˘ ˘ 。
o( 交互列の長さの最大値は? )
( ^o^) 区間の反転はできた • ( ⊖ ) ˘ ˘ 。
o( 交互列の長さの最大値は? ) • |JOI2013 本選 コード [ 検索 ]| ┗(☋ ` )┓ 三
( ^o^) 区間の反転はできた • ( ⊖ ) ˘ ˘ 。
o( 交互列の長さの最大値は? ) • |JOI2013 本選 コード [ 検索 ]| ┗(☋ ` )┓ 三 • ( ) Run-Length ◠‿◠ ☛ 圧縮の応用じゃ w
( ^o^) 区間の反転はできた • ( ⊖ ) ˘ ˘ 。
o( 交互列の長さの最大値は? ) • |JOI2013 本選 コード [ 検索 ]| ┗(☋ ` )┓ 三 • ( ) Run-Length ◠‿◠ ☛ 圧縮の応用じゃ w • ▂▅▇█▓▒░(’ω’) █▇▅▂ ░▒▓ うわあああ
交互列の長さを求める • Run-Length 圧縮では , となりと同じならま とめる , 違ったら新しく始める ,
といった 感じで縮約していったが , 今回はその逆 . • となりと違ったらまとめる , 同じだったら新 しく始める .
交互列の長さを求める • となりと違ったらまとめる , 同じだったら新 しく始める . • 擬似コード for
( すべての電飾 ) : if ( 前の電飾と違う色 ) then 長さ = 長さ +1 else 長さを配列に格納 . 長さ = 1. 長さを配列に格納 .
O(N^3) 時間のアルゴリズム • 結局何点とれるの? • 最悪 (10^5)^3 = 10^15. •
10^15?? • 10^15[msec] = 31709.7919838 年 ... • やばい (20 点が得られる )
O(N) 時間のアルゴリズム ◦|◦•|•◦•◦|◦|◦• • よくみてみよう
O(N) 時間のアルゴリズム ◦|◦•|•◦•◦|◦|◦• • 実際にひっくり返さなくても
O(N) 時間のアルゴリズム ◦|◦•|•◦•◦|◦|◦• • 隣り合う線に挟まる区間をひっくり返すと良 い!! ( 隣り合わない区間をひっくり返し ても ...
死 )
O(N) 時間のアルゴリズム ◦|◦•|•◦•◦|◦|◦• • 隣り合う 3 つの区間を考えて , 間をひっくり 返せば交互列
. やったぜ . • 3 つも区間が無いときはうしろに 2 つ なが さ 0 の区間を入れると考えやすい .
O(N) 時間のアルゴリズム • まとめ for ( すべての電飾 ) : if
( 前の電飾と違う色 ) then 長さ = 長さ +1 else 長さを配列に格納 . 長さ = 1. 長さを配列に格納 . • これをする ( 長さ 0 を 2 つ足すと good) • 配列の隣り合う 3 つの和の最大値が答え .
O(N) 時間のアルゴリズム • O(N) 時間で働く . 実装も綺麗 . • 10^2[msec]
= 100msec = 0.1s ( 実際はもっと 早いくらい ). • 文化祭もうまくいきそう . 100 点
ちなみに ◦◦••◦•◦◦◦• • 偶数番目をひっくり返すと ◦••◦◦◦◦•◦◦ • Run-Length して 3 つの区間和を求めるだけ