二分與三分05 Squares

2021-08-15 06:42:05 字數 912 閱讀 2030

題目大意:

給出n個點,判斷這n個點能組成幾個正方形。

解題思路:

排序+二分查詢。

列舉對角線的兩個點,算出中點,再算出另外兩個個對角線的點的座標,帶到原序列中查詢是否有這樣的點。因為列舉查詢超時所以用二分,但一開始的序列不是順序所以先用qsort排序。

由於查詢過程中會出現重複,所以查詢完畢之後要將結果/2。

ps:雖說一開始點是整數,但中點有可能不是整數所以整體用double計算,double資料的相等就不能用相等來判斷而用精度值判斷。

ac**:

#include #include #include #define n 1010

#define m 2

#define eps 1e-9

typedef struct boorboor;

int t;

boor coor[n];

int cmp(const void *a, const void *b)

int squares(double x, double y)

else

}return 0;

}int finds()

{ int i, j, c=0;

double x1, y1, x2, y2, x, y, xl, yl, xt1, xt2, yt1, yt2;

for (i=0;i

二分與三分

其實二分,三分與分治的思想差不多,都是對乙個問題的分段操作 前提為有序 qwq 二分法,在乙個單調有序的集合或函式中查詢乙個解,每次分為左右兩部分,判斷解在哪個部分中並調整上下界,直到找到目標元素,每次二分後都將捨棄一半的查詢空間,因此效率很高。例如,對於在實數區間 l,r 內遞增的連續函式f x ...

二分與三分

分值的思想 opj用longlong include include include include include using namespace std long long n long long a1 100005 int m long long a2 10005 int main scanf...

二分與三分

設定越界下標確定是否存在 1 x 2while l x 8while l setprecision 3 15while l 1e 5 1621 for i,0,100 22 從學oi到現在,二分思想是逐漸發揮其威力的。其思想跟數學歸納法很像 並不直接解決問題,而是將問題轉化為幾個相同的規模較小的問題...