基础类型
可用template
投影
是有方向的
求俩直线交点
推公式
q我们不知道,已知p1 p2,正弦定理,α可以用叉积表示出来 β同理 所以我们能求出p1q
已知piq 回归到我们上一个问题,已知方向和长度,我们就能够求出Voq
可以解决很多问题。但很多题目涉及除法,要用浮点数。
判断顺时针还是逆时针
to_left测试能够判断是输入的点是左边还是右边,当输入三个点时,第三个点再向量x的左侧为逆时针,反之则为顺时针,判断两点之间的距离会用到eps,可能会有精度误差,所以应该合理缩放
余弦定理
c^2 = a^2 + b^2 - 2abcosθ
符号函数
1.fabs(x) < eps == 0
2.x < 0 == -1
3.x > 0 == 1
向量
一般用点向式表示,可以表示射线。
判断点是否在直线上,如果点在直线上叉积== 0
如果俩直线平行或者重合,则没有交点,如果是直线与线段的交点,则可以判断线段的端点是否再在直线的两侧。
叉乘一定要逆时针叉乘!!!
点到直线的距离等于 面积除以底边长度, 和点到线段的距离不一样
分两种情况
当cosθ<0时就判断两边的距离
判断点是否在线段上
1.叉积 == 0
2.点积保证点p在线段上,在同一侧的话,点积>0
判断是否相交
是否相互横跨,则就可以,
如果等于就是在线段上
三角形
面积
1.叉乘
2.海伦公式 p = (a + b + c) / 2 ; s = sqrt((p - a) * (p - b) * (p - c))
四心
1.外接圆圆心 三边中垂线交点,到三角形三个顶点距离相等
2.内切圆圆心:三条角平分线的交点
3.垂心:三个垂线的交点
4.重心: 每个点与对边的连线,到三角形三边平方和最小,距离之积最大
普通多边形
1.不可相交的多边形
2.凸多边形,过任意一条边,其他点在这条边的同一侧
最小表示法
1.集合最小表示法
2.字符串最小表示法
例:ababc循环移位,构造出新串,找到字典序最小的串,原串的最小表示法
O(n)
1.破环成链, n => 2 n
找到这些串中最小的串,双指针暴力比较。i+ k和j + k是第一个不同的字母
当特殊情况时,就是循环串已经循环了所有点
构造
有很多方案,答案可以根据某种规则构造出来,贪心 -> 构造 数学技巧,分支很多,没有统一方法,自求多福,找规律,猜结论,自己定义一个规则
1.幻方
2.时态同步,到达叶节点时间相同,权值相同,想出最优解构造出来,看有什么性质、到达当前节点时间相同,求每个子树的最长路径
打表
1.如果范围小,我们就可以打表,写到代码里提交,先去暴力,找规律,在输出。
2.代码并不是标准做法,可以处理 99%, 但是有问题,处理不了的地方,打表特判。
趁早做打表题,暴搜。最优化问题,模拟退火
补分打表、
3.配合打表,预处理可能tle,或者代码长,预处理固定的,手算方便,难优化
1)矩阵乘+快速幂
2)状态压缩
3)数位dp
4)字符串
数据结构
1.并查集
路径压缩和按秩合并
拓展
1. 记录每个集合大小,将几何大小绑定到根节点。
2.每个点到根节点的距离。绑定到每个元素身上。多类,带权和拓展域并查集,空间复杂度 是k和o(k),带权是相对的思想,拓展域是枚举的思想。
389链表