POJ 2002 Squares解題報告

2021-07-27 05:23:19 字數 714 閱讀 3180

題目大意:

給你乙個二維平面上面的n(1000)個點的座標(每個點座標都不超過20000),讓你找出有多少個正方形。

給了三秒半····

思路:還是先看一眼暴力列舉,4個點的所有可能組合為n^4肯定超時了。列舉每兩個點的組合o(n^2),然後看是否存在可以和他們組成正方形的點。即該位置上是否有點(用雜湊表可以將查詢過程時間複雜度降為o(1)。

這個雜湊真是猛,只是要根據經驗找個合適的雜湊函式,一定要讓雜湊函式的值分布均勻,不然的話,和就相當於還是在列舉。這道題原本mod為1000的時候3438ms險過。mod改為10000之後,速度瞬間變快只需2469ms用空間換時間很划算。

程式跑快快~

#include#include#include#define n 1050

#define mod 10000

using namespace std;

int n;

struct point

poi[n];

int hash[mod+10]=;

int next[mod+10]=;

void input()

}bool find(point x)

return 0;

}void init()

int main()

} s=s/8;

cout<

題解 POJ2002 Squares(雜湊表)

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

POJ2002 Squares 計算幾何,二分

給定一堆點,求這些點裡哪些點可以構成正方形,題目給定n 1000,直接列舉四個點是肯定會超時的,因此要做一些優化。有公式,已知兩個點在正方形對角,分別是 x1,y1 和 x2,y2 那麼圍成正方形後另外兩個點 x3,y3 和 x4,y4 分別為 x3 x2 x2 y1 y3 x2 x2 x1 x4 ...

POJ 2002 檢查正方形

這道題被分類到 hash 裡面了,我覺得hash的作用就是快速的查詢以來判重和計數 這道題要判斷的是是否存在點和正方形是否被計數過。前者用 map 和 pair 來解決,後者嘛,我只列舉某邊作為上邊的情況,所以,不必擔心拉 列舉每條邊作為正方形上邊時候的情況即可。include include in...