題解 POJ2002 Squares(雜湊表)

2021-10-05 04:12:36 字數 1274 閱讀 3447

【題目描述】

給出平面上一些點的座標,統計由這些點可以組成多少個正方形。注意:正方形的邊不一定平行於座標軸。

【輸入】

輸入包括多組測試資料。每組的第一行是乙個整數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...