題目連結(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)的兩人之距離(相差幾格)為何?
假設(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)各位大大撥冗討論。