c - 平行四邊形數
time limit:2000ms memory limit:32768kb 64bit io format:%i64d & %i64u
fzu 2231
description
在乙個平面內給定n個點,任意三個點不在同一條直線上,用這些點可以構成多少個平行四邊形?乙個點可以同時屬於多個平行四邊形。
input
多組資料(<=10),處理到eof。
每組資料第一行乙個整數n(4<=n<=500)。接下來n行每行兩個整數xi,yi(0<=xi,yi<=1e9),表示每個點的座標。
output
每組資料輸出乙個整數,表示用這些點能構成多少個平行四邊形。
sample input
4 0 1
1 0
1 1
2 0
sample output
1平行四邊形的對角線互相平分,所以可以在輸入某個點的座標後,將該點與前面所有點的中點求出,中點重合的即可構成平行四邊形。
這裡可以用乙個map來儲存中點相同的線段數量的資訊用pair使中點座標成為1組資料,對這組資料的map值+1即可。
每當找到一條新的線段與之前的線段的中點重合,則該線段可以與之前所有的相同中點的線段構成平行四邊形,所以可以用乙個變數ans=map[make_pair(x[i]+x[j],y[i]+y[j])]++;
來表示所求結果。
這裡之所以不除以2是因為有可能出現小數而不便處理,反正所有中點座標值都變成2倍也沒有影響。
#include
#include
#include
using
namespace
std;
int x[505],y[505];
int main()
}printf("%d\n",ans);
}return
0;}
平行四邊形數
在乙個平面內給定n個點,任意三個點不在同一條直線上,用這些點可以構成多少個平行四邊形?乙個點可以同時屬於多個平行四邊形。input 多組資料 10 處理到eof。每組資料第一行乙個整數n 4 n 500 接下來n行每行兩個整數xi,yi 0 xi,yi 1e9 表示每個點的座標。output 每組資...
平行四邊形數
在乙個平面內給定n個點,任意三個點不在同一條直線上,用這些點可以構成多少個平行四邊形?乙個點可以同時屬於多個平行四邊形。input 多組資料 10 處理到eof。每組資料第一行乙個整數n 4 n 500 接下來n行每行兩個整數xi,yi 0 xi,yi 1e9 表示每個點的座標。output 每組資...
判斷平行四邊形數 typedef pair p
在乙個平面內給定n個點,任意三個點不在同一條直線上,用這些點可以構成多少個平行四邊形?乙個點可以同時屬於多個平行四邊形。input 多組資料 10 處理到eof。每組資料第一行乙個整數n 4 n 500 接下來n行每行兩個整數xi,yi 0 xi,yi 1e9 表示每個點的座標。output 每組資...