upc no.17場 問題 e: 平行四邊形
時間限制: 3 sec 記憶體限制: 128 mb
題目描述
求平面上n個點構成的平行四邊形個數。
輸入一行乙個數n。
接下來n行,每行兩個數x,y,表示這個點的座標為(x,y)。
保證任意兩點不重合,任意三點不共線。
輸出一行乙個整數表示平行四邊形個數。
樣例輸入
40 1
1 01 1
2 0樣例輸出1提示
對於100%的資料:n≤1500。
題解:
首先回顧一下判定平行四邊形的5大方法:
1、兩組對邊分別平行的四邊形是平行四邊形(定義判定法);
2、一組對邊平行且相等的四邊形是平行四邊形;
3、兩組對邊分別相等的四邊形是平行四邊形;
4、兩組對角分別相等的四邊形是平行四邊形(兩組對邊平行判定);
5、對角線互相平分的四邊形是平行四邊形。
補充:條件3僅在平面四邊形時成立,如果不是平面四邊形,即使是兩組對邊分別相等的四邊形,也不是平行四邊形。
第一組的話,要找到四個點,然後再利用向量判斷是否平行,暴力列舉的話就要用到四重迴圈,複雜度太高,跳過。
篩選過後,選擇第五條,首先,對角線互相平分可以想到用中點重合,而且中點的求法只需要兩個點的座標,用二重迴圈即可。
【本題要感謝一位小姐姐,受她啟發,有些東西直接貼過來了,畢竟寫的好啊qwq】。
#include
#define ll long long
#define inf 0x3f3f3f3f
using
namespace std;
const
int n =
1505
;int n,num=
1,sum=0;
struct nodec[n]
;node s[n*n]
;bool
cmp(node a,node b)
intmain()
}sort
(s,s+cnt,cmp)
;int xx=s[0]
.x;int yy=s[0]
.y;for
(int i=
1; iprintf
("%d"
,sum)
;return0;
}
平行四邊形
請小夥伴們對自己ac的題目進行標記,注意每人只能標記一次!不知道的不要標記,惡意標記者將 賬號!時間限制 3 sec 記憶體限制 128 mb 提交 狀態 題目描述 求平面上n個點構成的平行四邊形個數。輸入 一行乙個數n。接下來n行,每行兩個數x,y,表示這個點的座標為 x,y 保證任意兩點不重合,...
平行四邊形邊數
在乙個平面內給定n個點,任意三個點不在同一條直線上,用這些點可以構成多少個平行四邊形?乙個點可以同時屬於多個平行四邊形。input 多組資料 10 處理到eof。每組資料第一行乙個整數n 4 n 500 接下來n行每行兩個整數xi,yi 0 xi,yi 1e9 表示每個點的座標。output 每組資...
平行四邊形數
c 平行四邊形數 time limit 2000ms memory limit 32768kb 64bit io format i64d i64u fzu 2231 description 在乙個平面內給定n個點,任意三個點不在同一條直線上,用這些點可以構成多少個平行四邊形?乙個點可以同時屬於多個平...