d141 - Linearity
題目描述
題目要求判斷三個給定的二維座標點是否共線。輸入包含多個測試案例,每個案例包含三個點的座標,以逗號分隔 x 和 y 座標,以空格分隔各個點。對於每個案例,輸出 "collinear" 如果三點共線,否則輸出 "not collinear"。
解題思路
判斷三點是否共線,可以使用斜率公式。如果三點共線,則任意兩點之間的斜率都應該相等。然而,為了避免除以零的錯誤,可以改用以下等價條件:對於點 (x1, y1), (x2, y2), (x3, y3),如果它們共線,則 (y2 - y1) * (x3 - x2) == (y3 - y2) * (x2 - x1)。程式碼中直接使用了這個等價條件的變形:(a-c)(b-f) == (b-d)(a-e)。
複雜度分析
- 時間複雜度: O(T),其中 T 是測試案例的數量。對於每個案例,執行常數次數的算術運算。
- 空間複雜度: O(1),程式只使用了常數個變數。
程式碼
#include <iostream>
using namespace std;
int main(){
long long int t,a,b,c,d,e,f;
char p;
cin >> t;
while(t--){
cin >> a >> p >> b >> c >> p >> d >> e >> p >> f;
int ac=a-c,bd=b-d,ae=a-e,bf=b-f;
if(ac*bf==bd*ae)
cout << "collinear\n";
else
cout << "not collinear\n";
}
}