省選專練SCOI2015小凸想跑步

2021-08-17 10:14:36 字數 2041 閱讀 2444

終於快把scoi練完了。。。

毒瘤題這個題難點不在半平面交,在於推導:

其次精度問題

eps 和inf 取值需謹慎。

大了會丟精度,小了會炸精度。

接著得開long double

於是流輸出。

#includeusing namespace std;

#define double long double

const double inf=1e16;

const double eps=1e-16;

const int n=4e5;

/*int cmp(double x)

bool equal (double x,double y)

struct point

friend point operator + (point a,point b)

friend point operator - (point a,point b)

friend point operator * (point a,double k)

friend point operator / (point a,double k)

double ang()

void read()

}p[n],a[n];

typedef point vector;

struct line

double ang;

double ang()

}l[n],convex_hull[n],temp[n];

bool comp(line a,line b)

point getpot(line a,line b)*/

struct point

friend point operator +(point a,point b)

friend point operator -(point a,point b)

friend point operator *(point a,double k)

friend point operator /(point a,double k)

double ang()

void read()

}p[n],a[n];

int cmp(double x)

bool equal(double x,double y)

typedef point vector;

struct line

double ang;

double ang()

}l[n],temp[n],convex_hull[n];

bool comp(line a,line b)

int n;

int lcnt=0;

double area;

double squaring(int n,point *p)

else

continue;

} if(!cmp(b))

else

continue;

} //a*x+b*y+c<=0

double k=-(a/b);

double b=-(c/b);

//y?=kx+b

double x1=0;

double x2=1;

double y1=k*x1+b;

double y2=k*x2+b;

point p=point(x1,y1);

point q=point(x2,y2);

if(cmp(-b)>0)

else

} //in the polygon

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

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

half_plane_intersection();

double ans=squaring(tot,a);

cout<

}

SCOI2015 小凸想跑步

題目 先推一波式子,設 p x,y 那麼我們嘗試寫出點 x i,y i x y 和 p x,y 形成的三角形面積,就是用叉積寫一波 2s x i x y y x x y i y 大力拆開式子,發現 2s y y x x x i y x iy x y i 不難發現這是乙個 ax by c 的形式,肯定...

SCOI2015 小凸想跑步

半平面交 題目要求求出讓 delta pp 0p 1 在所有形成的三角形中面積最小 那麼可以考慮對於點 p x y p p 一定有 x x 1 y y 1 times x 0 x 1 y 0 y 1 x x i y y i times x x i y y i 那麼把式子化開就可以得到若干 ax by...

SCOI2015 小凸想跑步 解題報告

最開始以為和多邊形的重心有關,後來發現多邊形的重心沒啥好玩的性質 實際上你把面積小於的不等式列出來,發現是一次的,那麼就可以半平面交了 code include include include define vector point const int n 2e5 10 const double e...