ETH官方钱包

切換
舊版
前往
大廳
主題

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

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

題目連結(jié):


題目大意:
第一列給定一正整數(shù) T (T ≦ 3 × 10 ^ 4),代表有 T 筆測(cè)試資料。每筆測(cè)資第一列給定三正整數(shù) N 、 X 、 V (1 ≦ N ≦ X , 1 ≦ X ≦ 10 ^ 6 , V ≦ 10 ^ 6),代表有 N 個(gè)人並有一個(gè)環(huán)長(zhǎng) X ,每個(gè)人的移動(dòng)速度為 V 。

環(huán)上有 X 格位置,編號(hào)為 0 ~ X - 1 (順時(shí)針編號(hào))。速度 V 代表每秒移動(dòng)的格子數(shù)(格 / 秒)。

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

當(dāng)有任意兩人在環(huán)上的移動(dòng)方向相反而因此相遇時(shí),兩人會(huì)轉(zhuǎn)向與自己原本的方向之反向繼續(xù)移動(dòng)(總共還是每秒移動(dòng) V 格)。

試問(wèn)一秒鐘之後(所有人移動(dòng) V 格),相距最遠(yuǎn)的兩人之距離(相差幾格)為何?



範(fàn)例輸入:
1
3 15 5
0 0
5 0
14 1


範(fàn)例輸出:
10


解題思維:
假設(shè)一人位置為 A 、一人位置為 B ,且前者順時(shí)針、後者逆時(shí)針移動(dòng)。如果兩人會(huì)相遇,而此時(shí)先假設(shè)兩者不轉(zhuǎn)向,則前者會(huì)到 A + V 、後者會(huì)到 B - V 的位置。如果要轉(zhuǎn)向,則兩者因速度相同,因此相遇位置為 A 與 B 的中點(diǎn),此時(shí)兩者轉(zhuǎn)向繼續(xù)移動(dòng)。此時(shí)前者會(huì)抵達(dá) B - V 、後者會(huì)抵達(dá) A + V 的位置。

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

然後將所有位置由小到大排序,然後兩兩相鄰的算其兩者的位置差,取差最大的。但是要注意,因?yàn)檫@是環(huán)狀的結(jié)構(gòu),所以根據(jù)位置排序後的第一人跟最後一人是相鄰的。

此次分享到此為止,如有任何更加簡(jiǎn)潔的想法或是有說(shuō)明不清楚之地方,也煩請(qǐng)各位大大撥冗討論。
追蹤 創(chuàng)作集

作者相關(guān)創(chuàng)作

更多創(chuàng)作