題目大意:
給出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到現在,二分思想是逐漸發揮其威力的。其思想跟數學歸納法很像 並不直接解決問題,而是將問題轉化為幾個相同的規模較小的問題...