題目連結:
題目大意:
輸入第一列給定一正整數,代表有測試資料的數量。每筆測資前面會有一空白列,接著會有 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))。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。