切換
舊版
前往
大廳
主題

ZeroJudge - c654: 秒速五公分 解題心得

Not In My Back Yard | 2020-07-07 00:34:22 | 巴幣 0 | 人氣 159

題目連結:


題目大意:
第一列給定一正整數 T (T ≦ 3 × 10 ^ 4),代表有 T 筆測試資料。每筆測資第一列給定三正整數 N 、 X 、 V (1 ≦ N ≦ X , 1 ≦ X ≦ 10 ^ 6 , V ≦ 10 ^ 6),代表有 N 個人並有一個環長 X ,每個人的移動速度為 V 。

環上有 X 格位置,編號為 0 ~ X - 1 (順時針編號)。速度 V 代表每秒移動的格子數(格 / 秒)。

接著有 N 列輸入,每列給定兩整數 C 、 D (0 ≦ C ≦ X - 1 , D = 0 或 1),依序代表第一、第二、……第 N 個人的位置以及移動方向,D = 0 代表順時針、 D = 1 代表逆時針。

當有任意兩人在環上的移動方向相反而因此相遇時,兩人會轉向與自己原本的方向之反向繼續移動(總共還是每秒移動 V 格)。

試問一秒鐘之後(所有人移動 V 格),相距最遠的兩人之距離(相差幾格)為何?



範例輸入:
1
3 15 5
0 0
5 0
14 1


範例輸出:
10


解題思維:
假設一人位置為 A 、一人位置為 B ,且前者順時針、後者逆時針移動。如果兩人會相遇,而此時先假設兩者不轉向,則前者會到 A + V 、後者會到 B - V 的位置。如果要轉向,則兩者因速度相同,因此相遇位置為 A 與 B 的中點,此時兩者轉向繼續移動。此時前者會抵達 B - V 、後者會抵達 A + V 的位置。

由上可以看到如果單看這兩人的位置,轉不轉向是完全沒有任何差異的。而此題只要求「距離」的值,而沒有要求「哪兩人」離最遠。因此,我們可以直接忽略編號直接將所有人的初始位置根據其 D 的值(順時針或是逆時針)而加上或是減去 V (記得位置是 0 ~ X - 1 ,所以超出範圍要拉回去範圍裡)。

然後將所有位置由小到大排序,然後兩兩相鄰的算其兩者的位置差,取差最大的。但是要注意,因為這是環狀的結構,所以根據位置排序後的第一人跟最後一人是相鄰的。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作