poj2002 對雜湊表的理解進一步加深了

2021-06-23 09:18:01 字數 1064 閱讀 3424

time比較長,1454ms,不過我不在乎了,畢竟我沒那個實力去參加競賽,自然也沒必要糾結時間快慢,不超時,不報錯就行,學會並熟練這個演算法是最好的

給你一堆點,找四個點組成的正方形有多少個。

暴力方法就是列舉4個點看是否構成正方形,但是n有2000個。2000^4明顯超時。

但是2000^2是不會超時的,所以我們可以嘗試列舉2個點來求正方形是否存在

這個幾何好的話很容易的,初中知識就可以應付了吧。

已知2個點,(x1,y1),(x2,y2)

那麼剩下的2個點座標為

x3=x1+y1-y2; 

y3=y1+x2-x1;

x4=x2+y1-y2;

y4=y2+x2-x1;

這個自己畫個正方形,推一下很容易就出來啦

所以知道2個點,只要能查詢出剩下兩個點在不在就可以了。

所以關鍵就是查詢剩下的2個點,如果用2個for()來查詢,這樣子和列舉四個點沒什麼區別

於是雜湊表的作用就體現啦!用key值存點,我的key值=x*x+y; 這樣子查詢就特別方便,省去了很多不必要的查詢!

#include#include#include#define m 2005 

using namespace std;

int n,px[m],py[m];

struct point

;struct point *hash[m];

void insert(struct point *h,int xx,int yy)

else

insert(h->next,xx,yy);

}int find(int xx,int yy)

}int main()

printf("%d\n",ans);

} return 0;

}

poj 2002 列舉 雜湊

給定n個點,求出這些點一共可以構成多少個正方形。sample input 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 20sample output 1 61可列方程 可以得出 知道兩點求出其餘兩點 x3 node ...

題解 POJ2002 Squares(雜湊表)

題目描述 給出平面上一些點的座標,統計由這些點可以組成多少個正方形。注意 正方形的邊不一定平行於座標軸。輸入 輸入包括多組測試資料。每組的第一行是乙個整數n 1 n 1000 表示平面上點的數目,接下來n行,每行包括兩個整數,分別給出乙個點在平面上的x座標和y座標。輸入保證 平面上點的位置是兩兩不同...

雜湊表的理解

因為在開發中經常用到hashmap,hashset等集合結構,但是一直對其中的hash的意思不太理解。今天抽空查了一下資料,順便記錄一下現在的理解。事先宣告一下,此文只介紹雜湊表的資料結構,不介紹具體的hash演算法 首先我們不要去想hash表是用來幹嘛的,先以實際問題著手。就是現在需要乙個能夠儲存...