poj 2002二分查詢方法

2021-08-31 20:22:01 字數 507 閱讀 7911

題意:在平面內給出n個點,問你這些點一共能組成幾個不相等的正方形?

思路:幾何 + 二分。先排序,然後列舉任意兩點(x1,y1)(x2,y2),則如果存在點(x1+y1-y2,y1-x1+x2)(x2+y1-y2,y2-x1+x2)則它們能構成乙個正方形(這裡方向是確定的,否則還有一種可能)。所以用二分查詢是否存在這兩個點,有的話ans就+1。最後的ans要/2,因為正方形都重複算了一次。

關於二分查詢的**如下:

#include#includeusing namespace std;

const int max = 1005;

struct data

node[max];

bool cmp(const data &a, const data &b)

int main()

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

}return 0;

}

至於本題關於hash的演算法將會進一步闡述……

POJ2002 Squares 計算幾何,二分

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

poj2785 二分查詢

題目大意 給定n行數 n 4000 每行4個數。從這4列中,每列選擇乙個數使其和為0 暴力列舉 o n 4 會tle。優化 列舉第1,2列算出總和s1,列舉第3,4列算出總和s2。然後列舉s1,在s2中二分查詢等於 s1的數即可 o n 2log n 2 第一次wa 沒有認識到,s2陣列中有相同的數...

poj 3122 二分查詢

鏈結 poj 3122 題意 我生日派對時,準備了n個圓柱形的pie,半徑比一定相同,但高都為1,邀請了f個朋友,加上自己一共f 1人,需要將n個pie分給f 1個人 要求 每個人分得的pie尺寸要一樣大,並且同乙個人所分的pie要是從同乙個pie上得到的,n個pie分完後可以有剩餘 求 每個人最多...