切換
舊版
前往
大廳
主題

ZeroJudge - c105: 00270 - Lining Up 解題心得

Not In My Back Yard | 2020-08-06 00:00:05 | 巴幣 0 | 人氣 191

題目連結:


題目大意:
輸入第一列給定一正整數,代表有測試資料的數量。每筆測資前面會有一空白列,接著會有 N 列(1 < N < 700)的輸入,每列輸入給定兩整數,代表一個點的 X 、 Y 座標(不會有兩個點位於同一座標上)。

試問:有多少個點共線,即在同一條直線上。每個測試資料的輸出之間空一列(見範例輸出)。



範例輸入:
2

1 1
2 2
3 3
9 10
10 11

1 2
3 4


範例輸出:
3

2


解題思維:
窮舉所有基準點 P(也就是跑過每個點),然後對於每個基準點 P 求出其他點與 P 形成的線段之斜率(正確來說應為 x 偏差量和 y 偏差量,因為鉛直線「沒有」斜率(也可以說成是無限大))。然後將這 N - 1 個求出的斜率由小排到大(由大排到小也行)。

接著掃過這些斜率,看其中連續最長的相同斜率片段為多長,即得到了該基準點最多可以與多少個點共線。

然後取所有基準點各自與多少點共線之值中的最大值,即是所求。而時間複雜度為 O(n ^ 2 log (n))。




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

創作回應

更多創作