【題目描述】
給出平面上一些點的座標,統計由這些點可以組成多少個正方形。注意:正方形的邊不一定平行於座標軸。
【輸入】
輸入包括多組測試資料。每組的第一行是乙個整數n (1 <= n <= 1000),表示平面上點的數目,接下來n行,每行包括兩個整數,分別給出乙個點在平面上的x座標和y座標。輸入保證:平面上點的位置是兩兩不同的,而且座標的絕對值都不大於50000。最後一組輸入資料中n = 0,這組資料表示輸入的結束,不用進行處理。
【輸出】
對每組輸入資料,輸出一行,表示這些點能夠組成的正方形的數目。
【樣例輸入】
4
1 00 1
1 10 0
90 0
1 02 0
0 21 2
2 20 1
1 12 1
4-2 5
3 70 0
5 20
【樣例輸出】
1
61
雜湊表
如果列舉四個點,時間複雜度為o(n
4)
o(n^4)
o(n4
),嚴重超時。
對於乙個正方形,有乙個特性,知道任意兩點,就可以知道其他兩點。因此可以列舉其中兩個點,計算出另外兩個點,判斷另外兩個點是否存在。
判斷某個點是否存在,使用雜湊表,時間複雜度o(n
2)
o(n^2)
o(n2)。
#include
#define n 1000100
#define m 999991
#define ll long long
using
namespace std;
int h[n]
,nex[n]
, xx[n]
,yy[n]
,tot;
ll x[
1010
],y[
1010];
void
h(ll i,ll j)
intcheck
(ll i,ll j)
return0;
}int
main()
for(
int i=
1;i<=n;i++
)//根據兩個點計算另外兩個點
}printf
("%d\n"
,ans/4)
;}return0;
}
poj 2362 square 搜尋 剪枝
題目大意 給出n根木棍,問是否可以首尾相連組成乙個正方形。演算法 dfs 剪枝,合理巧妙的剪枝是避免tle的關鍵 1.特判,當木棍總長度不正好是4的倍數時,pass 2.最長的木棍比邊長小時,pass 3.對木棍長排序,每次都從當前最大到小列舉,在同一條邊中,之前放不下的木棍現在也一定放不下 4.已...
POJ 2002 Squares解題報告
題目大意 給你乙個二維平面上面的n 1000 個點的座標 每個點座標都不超過20000 讓你找出有多少個正方形。給了三秒半 思路 還是先看一眼暴力列舉,4個點的所有可能組合為n 4肯定超時了。列舉每兩個點的組合o n 2 然後看是否存在可以和他們組成正方形的點。即該位置上是否有點 用雜湊表可以將查詢...
題解 P2002 訊息擴散
有n個城市,中間有單向道路連線,訊息會沿著道路擴散,現在給出n個城市及其之間的道路,問至少需要在幾個城市發布訊息才能讓這所有n個城市都得到訊息。會了強聯通分量以後呢,我們可以開始寫這道題了。首先這道題不是乙個 dag dagda g 我們應該先縮點,把這個圖變成乙個 dag dagda g。變成 d...