Upload
Download free for 30 days
Login
Submit Search
RUPC2014_Day3_F
0 likes
678 views
Yuma Inoue
1 of 24
Download now
Download to read offline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
More Related Content
PDF
RUPC2014_Day3_B
Yuma Inoue
PDF
Senshu lt
Yuma Inoue
PDF
RUPC2014_Day3_G
Yuma Inoue
PDF
RUPC2014_Day3_Summary
Yuma Inoue
PDF
RUPC2014_Day3_C
Yuma Inoue
PDF
RUPC2014_Day3_D
Yuma Inoue
PDF
RUPC2014_Day3_A
Yuma Inoue
PDF
RUPC2014_Day3_E
Yuma Inoue
RUPC2014_Day3_B
Yuma Inoue
Senshu lt
Yuma Inoue
RUPC2014_Day3_G
Yuma Inoue
RUPC2014_Day3_Summary
Yuma Inoue
RUPC2014_Day3_C
Yuma Inoue
RUPC2014_Day3_D
Yuma Inoue
RUPC2014_Day3_A
Yuma Inoue
RUPC2014_Day3_E
Yuma Inoue
Viewers also liked
(9)
PPTX
Arc 010 d
Yuma Inoue
PPTX
Revisiting floorplan representation
Yuma Inoue
PPTX
2年生向けICPC紹介資料
Yuma Inoue
PDF
Graph Clustering on Missing Data
Yuma Inoue
PDF
Planar graph
Yuma Inoue
PDF
LP Duality
Yuma Inoue
PDF
Thesis Defence for Doctor of Information Science
Yuma Inoue
PDF
LCA and RMQ ~簡潔もあるよ!~
Yuma Inoue
PDF
博士論文執筆の流れ
Yuma Inoue
Arc 010 d
Yuma Inoue
Revisiting floorplan representation
Yuma Inoue
2年生向けICPC紹介資料
Yuma Inoue
Graph Clustering on Missing Data
Yuma Inoue
Planar graph
Yuma Inoue
LP Duality
Yuma Inoue
Thesis Defence for Doctor of Information Science
Yuma Inoue
LCA and RMQ ~簡潔もあるよ!~
Yuma Inoue
博士論文執筆の流れ
Yuma Inoue
Ad
RUPC2014_Day3_F
1.
2014/03/19立命館大学競技プログラミング合宿 F: Dangerous Delivery! -
危険な輸送 - 原案:井上! 解答:井上 "1
2.
2014/03/19立命館大学競技プログラミング合宿 問題概要 一直線に並んだ都市1から都市Nへ移動したい! 都市はM人の敵に見張られている! 1日の移動には、出発地点の都市を見張っている敵の数 ×移動距離だけリスクが生じる! D日までの移動で都市1から都市Nへ移動するリスクの 和を最小化せよ "2
3.
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])}! !
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 ) "4
5.
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
6.
2014/03/19立命館大学競技プログラミング合宿 敵の処理 "6 位置(x,y)にいる敵が監視できる範囲は(x-|y|,0)より左! x軸上に移動させて考えても良い
7.
2014/03/19立命館大学競技プログラミング合宿 敵の処理 位置(x,y)にいる敵が監視できる範囲は(x-|y|,0)より左! x軸上に移動させて考えても良い "7
8.
2014/03/19立命館大学競技プログラミング合宿 敵の処理 敵の位置をx軸に集め、ソートする! 都市の右にいる敵の数=都市を監視する敵の数! 左の都市から順に調べることで線形に計算できる = O(D(N+M)) 計6人都市1の左! :0人 "8
9.
2014/03/19立命館大学競技プログラミング合宿 敵の処理 敵の位置をx軸に集め、ソートする! 都市の右にいる敵の数=都市を監視する敵の数! 左の都市から順に調べることで線形に計算できる = O(D(N+M)) 計6人都市1の左! :0人 "9
10.
2014/03/19立命館大学競技プログラミング合宿 敵の処理 敵の位置をx軸に集め、ソートする! 都市の右にいる敵の数=都市を監視する敵の数! 左の都市から順に調べることで線形に計算できる = O(D(N+M)) 計6人都市1の左! :0人 "10
11.
2014/03/19立命館大学競技プログラミング合宿 敵の処理 敵の位置をx軸に集め、ソートする! 都市の右にいる敵の数=都市を監視する敵の数! 左の都市から順に調べることで線形に計算できる = O(D(N+M)) 計6人都市2の左! :1人 都市1の左! :0人 1人抜かした "11
12.
2014/03/19立命館大学競技プログラミング合宿 敵の処理 敵の位置をx軸に集め、ソートする! 都市の右にいる敵の数=都市を監視する敵の数! 左の都市から順に調べることで線形に計算できる = O(D(N+M)) 計6人都市2の左! :1人 都市1の左! :0人 1人抜かした "12
13.
2014/03/19立命館大学競技プログラミング合宿 敵の処理 敵の位置をx軸に集め、ソートする! 都市の右にいる敵の数=都市を監視する敵の数! 左の都市から順に調べることで線形に計算できる = O(D(N+M)) 計6人都市2の左! :1人 都市1の左! :0人 1人抜かした "13
14.
2014/03/19立命館大学競技プログラミング合宿 敵の処理 敵の位置をx軸に集め、ソートする! 都市の右にいる敵の数=都市を監視する敵の数! 左の都市から順に調べることで線形に計算できる = O(D(N+M)) 計6人都市2の左! :1人 都市1の左! :0人 1人抜かした "14
15.
2014/03/19立命館大学競技プログラミング合宿 敵の処理 敵の位置をx軸に集めソートする = O(M
logM)! 都市の右にいる敵の数=都市を監視する敵の数! 左の都市・左の敵から順に調べることで線形で 計算できる = O(D(N+M)) 計6人都市2の左! :1人 都市1の左! :0人 1人抜かした 2人抜かした 都市3の左! :3人 "15
16.
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
17.
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
18.
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
19.
2014/03/19立命館大学競技プログラミング合宿 Convex Hull Trick dp[d+1][x]
:= minj<i{a * x + b}の形をしている! 直線i-1個からなる! 最小値を取る直線のみを考え、その直線の1次式 にp[i]を代入することでO(1)で最小値が求まる "19
20.
2014/03/19立命館大学競技プログラミング合宿 Convex Hull Trick 通常の場合、新たに直線を追加するときに「最小値となり うるか」を動的に管理するためO(logN)必要! 今回は傾きw[d][j]が単調非増加なことを利用することで、 (ならし)O(1)で管理できる! w[d][j]≧w[d][j+1]:
監視されている人数は右側の都市ほど 少ない "20
21.
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
22.
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
23.
2014/03/19立命館大学競技プログラミング合宿 writer解 井上(C++) 87行! 井上(C++) 75行
(蟻本パクリ)
24.
2014/03/19立命館大学競技プログラミング合宿 提出状況 First Acceptance! on-site: 正答者なし! on-line:
Komaki (01:59)! 正答率 1/4 (25.0%)
Download