(幾何)n個點中找4個點求能組成正方形的最大面積

2021-09-22 20:08:38 字數 2236 閱讀 6102

在2023年3月底的團體程式設計天梯賽後,16級隊員正式退役了,有的隊員迅速找到了乙份滿意而體面的工作,有的隊員估摸一算發現自己好像能保研了,還有一些隊員則是在考研的道路上一往無前所向披靡,而有的隊員懵在原地,不知所措。

wys作為實驗室中乙個細心觀察生活中點點滴滴的人,她很快就發現了實驗室中某些人的狀態很不對勁,常常呆在某個位置發呆,於是她向lzx,yxy等人詢問情況,而卻苦於心情難以用言語表達,決定由肢體語言表達出自己的心情----我很方,非常方。

作為一名實驗室中考研人群中的一員,wys發現自己似乎沒有很多時間去處理這些問題,於是他把這個問題交給了你,希望你能夠給出正確的答案。

我們簡化問題,實驗室有n(1<=n<=3000)個呆在原地的人,他們被看做為平面上的整數點(x,y)(1<=x,y<=5000),要表達出他們有多方,一共需要滿足兩個條件:

1.組成乙個正方形,只有特殊的正方形才能說明他們非常方

2.組成的正方形盡可能大

即我們要找到平面上四個人組成的最大的正方形面積為多少?

如上圖所示,在平面上組成了兩個正方形面積s1和s2,顯然s1的面積更大一些,所以對於此時,答案為5

輸入描述

第1行為乙個整數n表示平面上有多少個站在原地不動的人

第2行到第n+1行有兩個數,分別為xi,yi表示第i名原地不動的人的座標 

輸出描述

輸出乙個數即最大正方形面積(若無法構成任意乙個正方形,則輸出-1)

樣例輸入

8

2 1

1 34 2

3 45 1

5 36 2

7 4

樣例輸出

5
題解 : 列舉兩個點,確定另外兩個點。

#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define eps (1e-8)

#define max 0x3f3f3f3f

#define u_max 1844674407370955161

#define l_max 9223372036854775807

#define i_max 2147483647

#define re register

#define pushup() tree[rt]=(tree[rt<<1],tree[rt<<1|1]);

#define nth(k,n) nth_element(a,a+k,a+n); // 將 第k大的放在k位

#define ko() for(int i=2;i<=n;i++) s=(s+k)%i // 約瑟夫

#define ok() v.erase(unique(v.begin(),v.end()),v.end()) // 排序,離散化

#define catalan c(2n,n)-c(2n,n-1) (1,2,5,14,42,132,429...) // 卡特蘭數

using namespace std;

inline int read()

while(c >= '0' & c <= '9') x = x * 10 + c - '0', c = getchar();

return x * f;

}typedef long long ll;

const double pi = atan(1.)*4.;

const int inf = 0x3f3f3f3f;

const ll inf = 0x3f3f3f3f3f3f3f3fll;

const int m=63;

const int n=1e5+5;

int n;

struct funf[3005];

bool fun(int x1,int y1,int x2,int y2)

else if(x1>=x2&&y1<=y2)

return false;

}int main()

ll ans=-1;

for(int i=0;i

if(fun(xx1,yy1,xx2,yy2))}}

if(leap) printf("%lld\n",ans);

else printf("-1\n");

return 0;

}

計算幾何 求n個點中最大四邊形

define size 2100 struct point tp size 叉積,oa ob inline llt cross point t const o,point t const a,point t const b a如果比b更靠下更靠左返回真 inline bool islowleft p...

N個點求最大斜率

面試題 平面上n個點,每兩個點都確定一條直線,求出斜率最大的那條直線所通過的兩個點 斜率不存在的情況不考慮 時間效率越高越好。分析 3個點a,b,c,把它們的按x座標排序。假設排序後的順序是abc,那麼有兩種情況 1.abc共線,則k ab k bc k ac 2.abc不共線,則abc將形成乙個三...

模擬退火求n個點到某點距離和最短

找出乙個點使得這個店到n個點的最長距離最短,即求最小覆蓋圓的半徑 用乙個點往各個方向擴充套件,如果結果更優,則繼續以當前步長擴充套件,否則縮小步長 include include includeconst double pi acos 1.0 struct point p 1010 int n po...