旋轉卡殼 半平面交板子 poj 2079

2021-08-04 16:44:14 字數 3715 閱讀 8469

sampleinput

編輯

3

3 42 6

2 75

2 63 9

2 08 0

6 5-1

sampleoutput

編輯

0.50

27.00

#pragma comment(linker, "/stack:1024000000,1024000000")

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

using namespace std;

const int maxn=2e3+5;

int m;

double r;

int ccnt,curcnt;//此時ccnt為最終切割得到的多邊形的頂點數、暫存頂點個數

struct point

point(double _x,double _y):x(_x),y(_y){}

void input()

};point points[maxn],p[maxn],q[maxn];//讀入的多邊形的頂點(順時針)、p為存放最終切割得到的多邊形頂點的陣列、暫存核的頂點

void getline(point x,point y,double &a,double &b,double &c)

void initial()

point intersect(point x,point y,double a,double b,double c)

void cut(double a,double b,double c)

if(a*p[i+1].x + b*p[i+1].y + c > 0)}}

for(int i = 1; i <= curcnt; ++i)p[i] = q[i];//將q中暫存的核的頂點轉移到p中

p[curcnt+1] = q[1];p[0] = p[curcnt];

ccnt = curcnt;

}void solve()

/*如果要向內推進r,用該部分代替上個函式

for(int i = 1; i <= m; ++i)

for(int i = 1; i <= ccnt; ++i)}}

printf("%.4lf %.4lf %.4lf %.4lf/n",p[ansx].x,p[ansx].y,p[ansy].x,p[ansy].y); */

//多邊形核的面積

double area = 0;

for(int i = 1; i <= curcnt; ++i)

area += p[i].x * p[i + 1].y - p[i + 1].x * p[i].y;

area = fabs(area / 2.0);

printf("%.2f\n",area);

}inline void guizhenghua()

inline void init()

int main()

}

//china no.1

#pragma comment(linker, "/stack:1024000000,1024000000")

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

templateinline t max(t a,t b,t c)

#define eps 1e-12

#define ll long long

#define max(a,b) ((a)>(b) ? (a) : (b))

#define min(a,b) ((a)<(b) ? (a) : (b))

#define feq(a,b) (fabs((a)-(b))eps+(b)) //a > b

#define fsm(a,b) ((b) > eps+(a)) //a < b

#define fbgeq(a,b) ((a) >= (b)-eps) //a >= b

#define fsmeq(a,b) ((b) >= (a)-eps) //a <= b

struct point

point(double _x,double _y):x(_x),y(_y){}

point operator -(const point &b)const

int operator ^(const point &b)const

int operator *(const point &b)const

void input()

};const int maxn = 100110;

inline double pdis(point a,point b)

inline double difcross(point p0,point p1,point p2)

inline double dis(point a,point b)

inline double rotate_caliper(point p,int n)

}*///旋轉卡殼,求兩點間距離平方的最大值

point v;

for(int i = 0;i < n;i++)

//return ans/2.0;

return ans;

}point p0;

int graham[maxn],top,n;

point points[maxn],p[maxn];

inline int cmp(point a, point b)

inline void convexhull()

swap(points[0],points[u]);

p0 = points[0];

sort( points+1, points + n, cmp );

if(n <= 2)

return;

}graham[0] = 0;

graham[1] = 1;

graham[2] = 2;

top = 2;

for( i = 3; i < n; i++)

graham[++top] = i;

}top ++;

for(int i = 0;i < top; ++i)

p[i] = points[graham[i]];

}int main()

*/ convexhull();

double ans = rotate_caliper(p,top);

printf("%lld\n",(ll)ans);

}return 0;

}

sort(points,points+n,point_cmp);

n=unique(points,points+n)-points;

去重

半平面交 板子

poj 2451 敲了個板子,比帶花樹稍微好一些,但是還是很麻煩.寫了點注釋 include include include define point vector const int n 2e4 10 struct vector vector double x,double y double an...

poj 2451 半平面交 板子

poj 2451 半平面,一條直線可以把平面分成兩部分,即稱為半平面 半平面交,即多條直線劃分出的相交的平面的面積 學習大佬的 清晰易懂,打算當成以後的模板用了 基於poj 2451 include include include include include using namespace st...

POJ 3525 半平面交

題意 求凸包內切圓最大半徑 題解 二分半徑,將凸包所有邊往凸包內平移這麼半徑長度,看平移後是否能圍成凸包.file main.cpp author swordholy created on 2011年3月25日,下午7 56 求凸包內切圓最大半徑 include include include in...