SlideShare a Scribd company logo
1 of 13
Download to read offline
Lonely Adventurer
~Problem E~
原案・作問:山口(@dohatsutsu)矢野(@dhibo_77)阿部 (@motxx)
証明:大桃(@zukky162)山口(@dohatsutsu)
概要(1/2)
➢ 島AにあるN隻のボート全てを島Bにまで運ぶためには最低で何分かか
るかを求める問題です。
➢ それぞれのボートには、島Aから島Bへ行くときにかかる時間が決められ
ています。
➢ また、島Bから島Aに戻るときにかかる時間は、島Aから島Bへ行くときに
かかる時間と同じです。
概要(2/2)
➢ 2つのボートを連結させることで、一度に2隻のボートを運べます。そのと
きにかかる時間は、2隻のボートのうち、より遅い方のボートの時間と同じ
になります。
➢ 例えば、2分のボートと4分のボートを連結させた場合、4分かかることに
なります。
➢ なお、乗り換えにかかる時間は無視できるものとします。
例題
➢ (例題)以下のような状況だった場合、答えはいくつになるでしょうか?
○ N=4
○ それぞれのボートの時間={1、2、4、8}
※ちなみに、1分のボートを使い回して全てのボートを運んだ場合、16
分かかります。(2+1+4+1+8=16)
➢ 問題文のサンプルでは上のような方法で正解が出せますが、このケー
スのように例外が存在します。
例題の答え
➢ 1ターン目開始時(0分経過) 
島A(少年)ーーーーーーーーーーーー島B
           
➢ 1ターン目終了時(2分経過) 
島Aーーーーーーーーーーーーーーー島B(少年)
                         
            
2分
4分
8分
4分
8分 2分
1分
1分
例題の答え
➢ 2ターン目開始時(2分経過) 
島Aーーーーーーーーーーーーーーー島B(少年)
              
➢ 2ターン目終了時(3分経過) 
島A(少年)ーーーーーーーーーーーー島B
                              
       
2分
4分
8分
4分
8分
2分
1分
1分
➢ 3ターン目開始時(3分経過)
島A(少年)ーーーーーーーーーーーー島B
   
➢ 3ターン目終了時(11分経過)
島Aーーーーーーーーーーーーーーー島B(少年)
               
               
              
2分
1分
例題の答え
4分
8分
1分
8分
4分
2分
➢ 4ターン目開始時(11分経過)
島Aーーーーーーーーーーーーーーー島B (少年)
               
➢ 4ターン目終了時(13分経過)
島A (少年)ーーーーーーーーーーーー島B
               
               
              
2分1分
例題の答え
4分
8分
1分
8分
4分
2分
➢ 5ターン目開始時(13分経過)
島A (少年)ーーーーーーーーーーーー島B
               
➢ 5ターン目終了時(15分経過)
島Aーーーーーーーーーーーーーーー島B (少年)
             
               
              
2分
1分
例題の答え
4分
8分
1分
8分
4分
2分
解法 - 貪欲法
SOLVE()
 sort ボートの速さ (→ A[0], A[1], …, A[N-1] とする)
 cost = 0, size = N
 while size > 3
  cost += min( A[0] + 2*A[1] + A[size-1], 2*A0 + A[size-2] + A[size-1] )
  size -= 2
 if   size == 3 then cost += A[0] + A[1] + A[2]
 else if size == 2 then cost += A[1]
 else cost += A[0]
return cost ソートに一番時間がかかり、O(NlogN)となります
解法 - 貪欲法
➢ 島Aにあるボートが3隻以下の時、答えはすぐにもとまります。
○ 4隻以上だった場合は、3隻以下になるまで以下の処理を繰り返し行います。
○ 島Aにあるボートの中で1番遅いものをX、2番目に遅いものをY、1番速いものをx,2
番目に速いものをyとおいた場合、次の2つの選択肢のうち効率の良い運び方を選ら
んでXとYを運びます。
➢ 選択肢1
○ xとXを連結させて島Bへ運ぶ    → xで島Aへ戻る
  → xとYを連結させて島Bへ運ぶ  → xで島Aへ戻る
➢ 選択肢2
○ xとyを連結させて島Bへ運ぶ   → xで島Aへ戻る
  → XとYを連結させて島Bへ運ぶ  → yで島Aへ戻る
提出状況
➢ First Accepted
○ Onsite : Darseinisshyuusti さん (56 min)
○ Online : japlj さん (35 min)
➢ Acceptances / Submissions : 14 / 53
Success rate : 26.42%
ジャッジ解
➢ ソルバー
○ 阿部(C++: 30行)
○ 大桃(C++: 24行)
➢ 旧ソルバー(制約 : 1<= N <= 15 解法はビットDP)
○ 日下(C++: 57行)
○ 高橋(C++: 48行)
○ 照沼(C++: 78行)
○ 平出(C++: 55行)
○ 矢野(C++: 90行)
○ 山口(C++: 70行)
○ 渡辺(C++: 61行)

More Related Content

Viewers also liked

Viewers also liked (11)

RUPC2014_Day2_L
RUPC2014_Day2_LRUPC2014_Day2_L
RUPC2014_Day2_L
 
RUPC2014_Day2_C
RUPC2014_Day2_CRUPC2014_Day2_C
RUPC2014_Day2_C
 
RUPC2014_Day2_H
RUPC2014_Day2_HRUPC2014_Day2_H
RUPC2014_Day2_H
 
RUPC2014_Day2_K
RUPC2014_Day2_KRUPC2014_Day2_K
RUPC2014_Day2_K
 
RUPC2014_Day2_A
RUPC2014_Day2_ARUPC2014_Day2_A
RUPC2014_Day2_A
 
Imr V3
Imr V3Imr V3
Imr V3
 
Confit canard
Confit canardConfit canard
Confit canard
 
KIROL EGUNA
KIROL EGUNAKIROL EGUNA
KIROL EGUNA
 
KIROL EGUNA
KIROL EGUNAKIROL EGUNA
KIROL EGUNA
 
KIROL EGUNA
KIROL EGUNAKIROL EGUNA
KIROL EGUNA
 
Matematika
MatematikaMatematika
Matematika
 

RUPC2014_Day2_E