1. 程式人生 > >NOIP 2017 集訓散記

NOIP 2017 集訓散記

余數 left 下一個 ... tro 給定 跑步 割點 同余

17.10.5


Maze

  題意

  給定一張 $n \times m$ , 包含空地 ‘.‘ 和障礙 ‘#‘ 的格點圖.

  給定起點和終點, 求從起點到終點的必須經過點有多少個.

  $n, m \le 10 ^ 3$ .

  分析1 - 搜索

  找到從起點到終點盡可能靠左上的路徑和盡可能靠右下的路徑, 然後取並.

  分析2 - Tarjan

  若 low[son] >= dfn[x] , 且 son 的後繼中有終點, 那麽 x 為從起點到終點的割點.

懶人跑步 - 同余最短路

  題意

  給定一個大小為 4 的環, 以及每條邊的邊權.

  懶人CJB從點 2 出發, 每次可以走到相鄰的一個點, 最後回到點 2 .

  求路徑總長 >= K 的走法中, 路徑總長最小是多少?

  $K \le 10 ^ {18}, d \le 30000$ .

  分析

  找到一個長度為 Len 的環, 那麽若存在路徑總長為 x , 那麽所有模 Len 與 x 同余, 且比 x 長的長度都可以走得到.

  用 Dijsktra 求出余數為 0, 1, ..., Len-1 的最小的路徑長度.

[HDU 6136] 賽艇大賽

  題意

  在環上有 $n$ 個人, 第 $i$ 個人在位置 $d_i$ , 速度為 $v_i$ . 兩個人相遇時, 標號小的那個人會掛掉. 剩下一個人的時候結束, 求結束時間.

  $n \le 10 ^ 5$ .

  分析

  第一次相遇一定是相鄰的兩個人, 把掛掉的那個人刪掉後, 第二次相遇仍然是相鄰的兩個人....

  用堆和雙向鏈表維護 {x, y, x 和 y相遇的時間} , 進行模擬.

NOIP 2017 集訓散記