typedef double typev;
const double eps = 1e-8
;const int n = 50005
;int sign(double d)
struct point
point operator+(point d)
}ps[n];
//int n, cn;
double dist(point d1, point d2)
double dist2(point d1, point d2)
bool cmp(point d1, point d2)
//st1-->ed1叉乘st2-->ed2的值
typev xmul(point st1, point ed1, point st2, point ed2)
typev dmul(point st1, point ed1, point st2, point ed2)
//多邊形類
struct poly
//加進乙個點
void push(point tp)
//第k個位置
int trim(int k)
void clear()
};//返回含有n個點的點集ps的凸包
poly graham(point* ps, int n)
return ans;
}ans.push(ps[0]);
ans.push(ps[1]);
point* tps = ans.ps
; int top = -1
; tps[++top] = ps[0];
tps[++top] = ps[1];
for(int i = 2
; i < n; i++)
int tmp = top; //注意要賦值給tmp!
for(int i = n - 2
; i >= 0; i--)
ans.pn = top;
return ans;
}//求點p到st->ed的垂足,列引數方程
point getroot(point p, point st, point ed)
//next為直線(st,ed)上的點,返回next沿(st,ed)右手垂直方向延伸l之後的點
point change(point st, point ed, point next, double l)
//求含n個點的點集ps的最小面積矩形,並把結果放在ds(ds為乙個長度是4的陣列即可,ds中的點是逆時針的)中,並返回這個最小面積。
double getminarearect(point* ps, int n, point* ds)else
for(r=u=i = 0
; i < cn; i++)
while(dmul(con[i], con[i+1], con[i], con[r])
<= dmul(con[i], con[i+1], con[i], con[(r+1)%cn]))
while(dmul(con[i], con[i+1], con[i], con[l])
>= dmul(con[i], con[i+1], con[i], con[(l+1)%cn]))
tmp = dmul(con[i], con[i+1], con[i], con[r]) - dmul(con[i], con[i+1], con[i], con[l]);
tmp *= xmul(con[i], con[i+1], con[i], con[u]);
tmp /= dist2(con[i], con[i+1]);
len = xmul(con[i], con[i+1], con[i], con[u])/dist(con[i], con[i+1]);
if(sign(tmp - ans) < 0)}}
return ans+eps;
}
給矩形面積求周長最小
input 輸入1個數s 1 s 10 9 output 輸出最小周長。sample input 24sample output 20這道題剛開始憨憨的沒管時間用兩個for去幹被爆tle,但後來發現是高中學的乙個均值不等式,給定乙個面積去求周長的最小值,可以用ab a b 2 4,用這個不等式當a ...
求最大的矩形面積
第一次想的時候,想到了動態規劃,但是還有乙個複雜度更低的方法,就是採用棧的方式。第二種方法是看了厲害的人的部落格之後才理解的。它的思想就是從後往前遍歷,使用棧儲存當前遍歷到的最小值,這個值是不斷更改的,同時,沒遍歷一次,計算一次當前的面積。在做leetcode的時候發現,從後往前遍歷的題目有很多,巧...
求三個矩形的相交矩形。
給定乙個矩形結構體 struct rect 要求實現函式 rect intersectrect const rect recta,const rect recta,const rect recta 若三個矩形有相交矩形,則返回相交矩形,若沒有,則設定返回矩形的x y w h均為 1。分析 1.首先要...