计算几何训练笔记

Luogu1452 旋转卡壳,注意判一下平行的情况,另外有个比较简介的求凸包方法,就不用分别求上凸壳和下凸壳再合起来了:

int is(point a,point b){return a.x==b.x?a.y<b.y:a.x<b.x;}
#define pd(A,B,C) (cross((C-B),(B-A))>0||(cross((C-B),(B-A))==0&&is(A,B)==is(B,C)))

sort(p+1,p+n+1,is);
int cnt=0,i;
for(i=1;i<=n;all[++cnt]=i++) while(cnt>1&&pd(p[all[cnt-1]],p[all[cnt]],p[i])) --cnt;
for(i=n-1;i;all[++cnt]=i--) while(cnt>1&&pd(p[all[cnt-1]],p[all[cnt]],p[i])) --cnt;--cnt;

all 存的就是凸包点的编号

然后旋转卡壳注意可以用面积判断点离线段距离的长短,然后每次统计答案需要 jj+1 的两个点都需要更新答案。

Luogu2924 考虑将任两个点之间连边,按照边的斜率(atan2(y,x))排序,这显然就是个 DAG,dp 一下即可

nowcoder 57364E 模拟退火,考虑正方形的边长实际上可以认为是旋转角度 rad 的函数,其中 rad 表示逆时针旋转 rad 之后,将正方形认为是水平竖直的,退火调参调吐了image
最后 eps 设到 1e-8,在最后还加了个爬山才过。

Aizu-CGL
把板子完善了一下。。

posted @   SkyRainWind  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示