# Geometry# Math# Conditional Logic

b899 - 2. 物品探測

🔗 前往 ZeroJudge 原題

題目描述

題目給定三個點的座標,要求找出第四個點,使得這四個點構成一個平行四邊形。輸出第四個點的座標。

解題思路

題目要求找出第四個點,使得三個給定的點和這個點構成一個平行四邊形。平行四邊形的性質是,對角線的中點相同。因此,我們可以考慮三種情況:

  1. 以給定的三個點中的任意兩個點作為對角線的端點,求出對角線的中點,然後根據中點公式求出第四個點的座標。
  2. 檢查哪兩個點構成的邊最長,最長的邊對應的點是平行四邊形的頂點。
  3. 根據平行四邊形的性質,第四個點的座標可以通過向量加法得到。例如,如果 A, B, C 是給定的三個點,那麼第四個點 D 可以是 A + C - B,或者 B + A - C,或者 B + C - A。

程式碼中,計算了三個點兩兩之間的距離的平方,然後根據距離的大小判斷哪個點是平行四邊形的頂點,並計算出第四個點的座標。

複雜度分析

  • 時間複雜度: O(1)
  • 空間複雜度: O(1)

程式碼

#include <iostream>
using namespace std;
int main(){
	int x1,x2,x3,y1,y2,y3;
	while(cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3){
		int ab=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
		int ac=(x1-x3)*(x1-x3)+(y1-y3)*(y1-y3);
		int bc=(x2-x3)*(x2-x3)+(y2-y3)*(y2-y3);
		if(ab>ac&&ab>bc)
			cout << x1+x2-x3 << " " << y1+y2-y3 << endl;
		else if(ac>ab&&ac>bc)
			cout << x1+x3-x2 << " " << y1+y3-y2 << endl;
		else
			cout << x2+x3-x1 << " " << y2+y3-y1 << endl;
	}
}

Discussion