2014/03/19立命館大学競技プログラミング合宿
F: Dangerous Delivery!
- 危険な輸送 -
原案:井上!
解答:井上
"1
2014/03/19立命館大学競技プログラミング合宿
問題概要
一直線に並んだ都市1から都市Nへ移動したい!
都市はM人の敵に見張られている!
1日の移動には、出発地点の都市を見張っている敵の数
×移動距離だけリスクが生じる!
D日までの移動で都市1から都市Nへ移動するリスクの
和を最小化せよ
"2
2014/03/19立命館大学競技プログラミング合宿
想定解法
"3
d日目に都市iを見張っている敵の数w[d][i]を求める!
!
!
DPによってd日目に都市iにいるときの最小リスク
を求める!
dp[d+1][i] := min{dp[d][j] + w[d][j]*abs(p[i]-p[j])}!
!
2014/03/19立命館大学競技プログラミング合宿
想定TLE解法
d日目に都市iを見張っている敵の数w[d][i]を求める!
それぞれの敵が見張っているか普通に判定: O(DNM)!
!
DPによってd日目に都市iにいるときの最小リスクを求
める!
dp[d+1][i] := min{dp[d][j] + w[d][j]*abs(p[i]-p[j])}!
!
愚直にdpを更新: O(DN2
)
"4
2014/03/19立命館大学競技プログラミング合宿
想定TLE解法
d日目に都市iを見張っている敵の数w[d][i]を求める!
全ての敵について見張っているか判定: O(DNM)!
!
DPによってd日目に都市iにいるときの最小リスクを
求める!
dp[d+1][i] := min{dp[d][j] + w[d][j]*abs(p[i]-p[j])}!
!
愚直にdpを更新: O(DN2
)
"5
2014/03/19立命館大学競技プログラミング合宿
敵の処理
"6
位置(x,y)にいる敵が監視できる範囲は(x-|y|,0)より左!
x軸上に移動させて考えても良い
2014/03/19立命館大学競技プログラミング合宿
敵の処理
位置(x,y)にいる敵が監視できる範囲は(x-|y|,0)より左!
x軸上に移動させて考えても良い
"7
2014/03/19立命館大学競技プログラミング合宿
敵の処理
敵の位置をx軸に集め、ソートする!
都市の右にいる敵の数=都市を監視する敵の数!
左の都市から順に調べることで線形に計算できる
= O(D(N+M))
計6人都市1の左!
:0人
"8
2014/03/19立命館大学競技プログラミング合宿
敵の処理
敵の位置をx軸に集め、ソートする!
都市の右にいる敵の数=都市を監視する敵の数!
左の都市から順に調べることで線形に計算できる
= O(D(N+M))
計6人都市1の左!
:0人
"9
2014/03/19立命館大学競技プログラミング合宿
敵の処理
敵の位置をx軸に集め、ソートする!
都市の右にいる敵の数=都市を監視する敵の数!
左の都市から順に調べることで線形に計算できる
= O(D(N+M))
計6人都市1の左!
:0人
"10
2014/03/19立命館大学競技プログラミング合宿
敵の処理
敵の位置をx軸に集め、ソートする!
都市の右にいる敵の数=都市を監視する敵の数!
左の都市から順に調べることで線形に計算できる
= O(D(N+M))
計6人都市2の左!
:1人
都市1の左!
:0人
1人抜かした
"11
2014/03/19立命館大学競技プログラミング合宿
敵の処理
敵の位置をx軸に集め、ソートする!
都市の右にいる敵の数=都市を監視する敵の数!
左の都市から順に調べることで線形に計算できる
= O(D(N+M))
計6人都市2の左!
:1人
都市1の左!
:0人
1人抜かした
"12
2014/03/19立命館大学競技プログラミング合宿
敵の処理
敵の位置をx軸に集め、ソートする!
都市の右にいる敵の数=都市を監視する敵の数!
左の都市から順に調べることで線形に計算できる
= O(D(N+M))
計6人都市2の左!
:1人
都市1の左!
:0人
1人抜かした
"13
2014/03/19立命館大学競技プログラミング合宿
敵の処理
敵の位置をx軸に集め、ソートする!
都市の右にいる敵の数=都市を監視する敵の数!
左の都市から順に調べることで線形に計算できる
= O(D(N+M))
計6人都市2の左!
:1人
都市1の左!
:0人
1人抜かした
"14
2014/03/19立命館大学競技プログラミング合宿
敵の処理
敵の位置をx軸に集めソートする = O(M logM)!
都市の右にいる敵の数=都市を監視する敵の数!
左の都市・左の敵から順に調べることで線形で
計算できる = O(D(N+M))
計6人都市2の左!
:1人
都市1の左!
:0人
1人抜かした 2人抜かした
都市3の左!
:3人
"15
2014/03/19立命館大学競技プログラミング合宿
想定TLE解法
d日目に都市iを見張っている敵の数w[d][i]を求める!
全ての敵について見張っているか判定: O(DNM)!
!
DPによってd日目に都市iにいるときの最小リスクを
求める!
dp[d+1][i] := min{dp[d][j] + w[d][j]*abs(p[i]-p[j])}!
!
愚直にdpを更新: O(DN^2)
"16
2014/03/19立命館大学競技プログラミング合宿
DPの高速化
DPの式に注目し、変形を行う!
dp[d+1][i] := min{dp[d][j] + w[d][j]*abs(p[i]-p[j])}!
!
dp[d+1][i] := minj<i{dp[d][j] + w[d][j]*abs(p[i]-p[j])}!
!
dp[d+1][i] := minj<i{dp[d][j] + w[d][j]*(p[i]-p[j])}!
!
dp[d+1][i] := minj<i{w[d][j]*p[i] + dp[d][j] - w[d][j]*p[j]}!
!
赤:iの関数 青:iに関して定数
後戻りは意味がない
p[i]>p[j]
展開・変形
"17
2014/03/19立命館大学競技プログラミング合宿
DPの高速化
dp[d+1][i] := minj<i{w[d][j]*p[i] + dp[d][j] -
w[d][j]*p[j]}!
!
dp[d+1][x] := min{a * x + b}の形をしている!
すなわち、傾きw[d][j],切片dp[d][j]-w[d][j]*p[j]
の直線i-1個からなる直線集合のうち、x=p[i]で
最小値をとるものがわかればよい
"18
2014/03/19立命館大学競技プログラミング合宿
Convex Hull Trick
dp[d+1][x] := minj<i{a * x + b}の形をしている!
直線i-1個からなる!
最小値を取る直線のみを考え、その直線の1次式
にp[i]を代入することでO(1)で最小値が求まる
"19
2014/03/19立命館大学競技プログラミング合宿
Convex Hull Trick
通常の場合、新たに直線を追加するときに「最小値となり
うるか」を動的に管理するためO(logN)必要!
今回は傾きw[d][j]が単調非増加なことを利用することで、
(ならし)O(1)で管理できる!
w[d][j]≧w[d][j+1]: 監視されている人数は右側の都市ほど
少ない
"20
2014/03/19立命館大学競技プログラミング合宿
Convex Hull Trick
アバウトな流れ

for(i from 1 to N){

1. 直線集合から、x=p[i]について最小となる直線f(x)を

計算(ならしO(1))

2. dpを更新: dp[d+1][i] = f(p[i])

3. 必要のない直線を削除し(ならしO(1))、傾きw[d][i]、

切片dp[d][i]-w[d][i]*p[i]の直線を追加

}
"21
2014/03/19立命館大学競技プログラミング合宿
Convex Hull Trick
Convex Hull Trickにより、dp[d][i]を1≦i≦Nの区間で更新
するのがO(N)でできるようになった!
よって、DPが全体でO(DN)!
!
Convex Hull Trickのより詳細な説明は下記参照!
蟻本2版 p.304 「K-Anonymous Sequence」!
sune2さんのブログ: http://d.hatena.ne.jp/sune2/
20140310/1394440369
"22
2014/03/19立命館大学競技プログラミング合宿
writer解
井上(C++) 87行!
井上(C++) 75行 (蟻本パクリ)
2014/03/19立命館大学競技プログラミング合宿
提出状況
First Acceptance!
on-site: 正答者なし!
on-line: Komaki (01:59)!
正答率 1/4 (25.0%)

More Related Content

PDF
RUPC2014_Day3_B
PDF
Senshu lt
PDF
RUPC2014_Day3_G
PDF
RUPC2014_Day3_Summary
PDF
RUPC2014_Day3_C
PDF
RUPC2014_Day3_D
PDF
RUPC2014_Day3_A
PDF
RUPC2014_Day3_E
RUPC2014_Day3_B
Senshu lt
RUPC2014_Day3_G
RUPC2014_Day3_Summary
RUPC2014_Day3_C
RUPC2014_Day3_D
RUPC2014_Day3_A
RUPC2014_Day3_E

Viewers also liked (9)

PPTX
Arc 010 d
PPTX
Revisiting floorplan representation
PPTX
2年生向けICPC紹介資料
PDF
Graph Clustering on Missing Data
PDF
Planar graph
PDF
LP Duality
PDF
Thesis Defence for Doctor of Information Science
PDF
LCA and RMQ ~簡潔もあるよ!~
PDF
博士論文執筆の流れ
Arc 010 d
Revisiting floorplan representation
2年生向けICPC紹介資料
Graph Clustering on Missing Data
Planar graph
LP Duality
Thesis Defence for Doctor of Information Science
LCA and RMQ ~簡潔もあるよ!~
博士論文執筆の流れ
Ad

RUPC2014_Day3_F