SlideShare a Scribd company logo
1 of 34
Download to read offline
Problem G: Chairs
作問: aoba
解説: がっちょ君
1 / 34
問題概要
- 番号1∼NのN個の椅子がある
- ID1∼NのN人がいて、人iは椅子pi に座りたい
- 人々はIDが小さい順に1列に並び、列が前の人か
ら以下の操作を行う
1. 椅子pi が空席の場合はその席に座る
2. 空席ではない場合はpi に1加算して、列の最後
尾に並び直す(Nを超えた場合は1となる)
- 全ての人が座るまでこの操作を繰り返す
- 最終的にそれぞれの椅子に座っている人のIDを
出力する
- 制約: 1 ≤ N ≤ 105, 1 ≤ pi ≤ N
2 / 34
ダメな解法
• 問題文通りにシミュレーション
→ 例えば、全ての初期位置が同じ場合
はN × (N + 1)/2回の操作をすることになり
N = 105
なので間に合わない
3 / 34
ポイント
• 問題を「各椅子に対して人が並んでいる」
と置き換える
4 / 34
解法1
• 累積和 + スタック
5 / 34
解法1
• 問題を置き換えた場合でもどこからどのような
順序で処理を行うかを決める必要がある(円環す
るため)
• 適切な位置を選択することで円環を直線と考え
ることができる
• 適切な位置は次のように決められる
1. 各椅子に対して初期値を-1として、人が並んで
いる場合はその人数だけ加算して累積和を取
る
2. その中で最も値が小さい場所をxとすると、
x + 1が適切な位置となる(x = Nなら1)
6 / 34
解法1
• 適切な位置を選んだらその位置からスタックを
使い、それぞれの椅子に誰が座るかを決定して
いく
• O(N)で解くことができる
※ 工夫すると累積和を使用しなくても解くことが
できる
7 / 34
解法1
8 / 34
N = 8, p = {1, 5, 1, 7, 4, 5, 7, 5}の場合
1 2 3 4 5 6 7 8
1
3
5 2
6
8
4
7
1 -1 -1 0 2 -1 1 -1
解法1
9 / 34
累積和を取る
1 2 3 4 5 6 7 8
1
3
5 2
6
8
4
7
1 0 -1 -1 1 0 1 0
解法1
10 / 34
椅子3が最小 → 椅子4から操作を開始する
1 2 3 4 5 6 7 8
1
3
5 2
6
8
4
7
1 0 -1 -1 1 0 1 0
start→
解法1
11 / 34
1 2 3 4 5 6 7 8
↓
1
3
5 2
6
8
4
7
Stack
解法1
12 / 34
1 2 3 4 5 6 7 8
↓
1
3
2
6
8
4
7
5
Stack
解法1
13 / 34
1 2 3
5
4 5 6 7 8
↓
1
3
2
6
8
4
7
Stack
解法1
14 / 34
1 2 3
5
4 5 6 7 8
↓
1
3
2
6
8
4
7
Stack
解法1
15 / 34
1 2 3
5
4 5 6 7 8
↓
1
3
4
7
2
6
8
Stack
解法1
16 / 34
1 2 3
5
4
2
5 6 7 8
↓
1
3
4
7
6
8
Stack
解法1
17 / 34
1 2 3
5
4
2
5 6 7 8
↓
1
3
4
7
6
8
Stack
解法1
18 / 34
1 2 3
5
4
2
5
6
6 7 8
↓
1
3
4
7
8
Stack
解法1
19 / 34
1 2 3
5
4
2
5
6
6 7 8
↓
1
3
4
7
8
Stack
解法1
20 / 34
1 2 3
5
4
2
5
6
6 7 8
↓
1
3
4
7
8
Stack
解法1
21 / 34
1 2 3
5
4
2
5
6
6
4
7 8
↓
1
3
7
8
Stack
解法1
22 / 34
1 2 3
5
4
2
5
6
6
4
7 8
↓
1
3
7
8
Stack
解法1
23 / 34
1 2 3
5
4
2
5
6
6
4
7
7
8
↓
1
3
8
Stack
解法1
24 / 34
1 2 3
5
4
2
5
6
6
4
7
7
8
↓
1
3
8
Stack
解法1
25 / 34
1 2 3
5
4
2
5
6
6
4
7
7
8
↓
1
3
8
Stack
解法1
26 / 34
1
1 2 3
5
4
2
5
6
6
4
7
7
8
↓
3
8
Stack
解法1
27 / 34
1
1 2 3
5
4
2
5
6
6
4
7
7
8
↓
3
8
Stack
解法1
28 / 34
1
1
3
2 3
5
4
2
5
6
6
4
7
7
8
↓
8
Stack
解法1
29 / 34
1
1
3
2 3
5
4
2
5
6
6
4
7
7
8
↓
8
Stack
解法1
30 / 34
1
1
3
2
8
3
5
4
2
5
6
6
4
7
7
8
↓
Stack
解法2
• シミュレーション
• 列ごとにまとめて動かしていく
• 任意の順序で列を動かしてOK
31 / 34
解法2
• 各列について以下の操作を行う必要がある
1. 最寄りの空席の位置を探す
2. 2つの列をマージする
(一方の列をもう一方の列の後ろに挿入する)
• これらは例えばstd::setとstd::listを組み合わせる
とO(logN)で実現することができる
• N人についてこの操作を行うとO(NlogN)となる
32 / 34
結果
• Onsite
- First Submission: caffe チーム (113 min)
- First Accepted: caffe チーム (113 min)
• Online
- First Submission: ei1333 さん (49 min)
- First Accepted: caffe チーム (113 min)
• Success Rate (Accepted / Submission)
12.00 % (3 / 25)
33 / 34
ジャッジ解
aoba C++ 57行
arrows C++ 49行
arrows Java 38行
gacho C++ 25行
haji C++ 43行
kawa C++ 17行
kzyKT C++ 20行
sate C++ 36行
uku C++ 66行
34 / 34

More Related Content

Viewers also liked (19)

RUPC2017:Cの解説
RUPC2017:Cの解説RUPC2017:Cの解説
RUPC2017:Cの解説
 
B pub
B pubB pub
B pub
 
RUPC2017:Bの解説
RUPC2017:Bの解説RUPC2017:Bの解説
RUPC2017:Bの解説
 
RUPC2017:E解説
RUPC2017:E解説RUPC2017:E解説
RUPC2017:E解説
 
RUPC2017:K解説
RUPC2017:K解説RUPC2017:K解説
RUPC2017:K解説
 
E pub
E pubE pub
E pub
 
A pub
A pubA pub
A pub
 
F pub
F pubF pub
F pub
 
D pub
D pubD pub
D pub
 
C : 解説
C : 解説C : 解説
C : 解説
 
I : Traffic Tree
I : Traffic TreeI : Traffic Tree
I : Traffic Tree
 
全域木いろいろ
全域木いろいろ全域木いろいろ
全域木いろいろ
 
RUPC2017:M問題
RUPC2017:M問題RUPC2017:M問題
RUPC2017:M問題
 
RMQ クエリ処理
RMQ クエリ処理RMQ クエリ処理
RMQ クエリ処理
 
C pub
C pubC pub
C pub
 
グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜グラフネットワーク〜フロー&カット〜
グラフネットワーク〜フロー&カット〜
 
G pub
G pubG pub
G pub
 
Pythonではじめる競技プログラミング
Pythonではじめる競技プログラミングPythonではじめる競技プログラミング
Pythonではじめる競技プログラミング
 
AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組み
 

More from Takumi Yamashita (13)

Deposited Ranges
Deposited RangesDeposited Ranges
Deposited Ranges
 
0: 全体の講評
0: 全体の講評0: 全体の講評
0: 全体の講評
 
M : 解説
M : 解説M : 解説
M : 解説
 
L : 解説
L : 解説L : 解説
L : 解説
 
K : 解説
K : 解説K : 解説
K : 解説
 
J : 解説
J : 解説J : 解説
J : 解説
 
H : hegemony get
H : hegemony getH : hegemony get
H : hegemony get
 
G : 解説
G : 解説G : 解説
G : 解説
 
F : 解説
F : 解説F : 解説
F : 解説
 
E : 解説
E : 解説E : 解説
E : 解説
 
D : 解説
D : 解説D : 解説
D : 解説
 
B potatoes
B  potatoesB  potatoes
B potatoes
 
A: 解説
A: 解説A: 解説
A: 解説
 

Recently uploaded

TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 

Recently uploaded (9)

TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 

RUPC2017:G解説