- 博客(6)
- 收藏
- 关注
原创 计算几何——凸包
凸包作为计算几何入门必学的知识非常重要,那么什么是凸包呢?凸包的定义可以理解为给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边形,它能包含点集中所有的点。在找凸包的时候需要使用向量,因为两向量的叉积的正负可以判断两个向量所处的方位。向量以及相应的操作建议写成结构体的形式封装起来,包括运算符重载。struct point{ double x, y; double pos; point operator+(point a) { return point{ x + a.x,y + a.
2021-03-19 21:01:37
1832
2
原创 扩展欧几里得算法
如果存在整数a,b,满足ax+by=gcd(a,b)ax+by=gcd(a,b)ax+by=gcd(a,b),那么必然存在一个x0,y0使等式成立。这就是贝祖尔定理。我们可以来看看这个等式,把它化简一下ax1+by1===gcd(a,b)===gcd(b,a%b)===bx2+(a%b)y2而a%b===a-a/b*b所以, ax1+by1===bx2+(a-a / b *b) y2ax1+by1===bx2+ay2-b * a/b * y2ax1+by1===ay2+b(x2-a/b * y2
2021-03-14 15:26:19
186
原创 ST表的学习
作用ST表的优势在于可以把查询一个区间的最值的时间复杂度降为O(n)O(n)O(n)。状态转移假设有一个数组里有10000个元素,第i个元素记为ar[i]。我们用f[i][j]表示从第i个元素开始,向右i+2j-1的 这些元素的最大值。有f[i][j]=max(f[i][j-1],f[i+2j-1][j-1])这其实是把区间[i][j]分成了两个部分,每部分的长度均为2j-1,将两个部分的最大值保存在f[i][j]中。有了这个状态转移方程后,就可以求出所有的f数组了。不难看出,时间复杂度为O(n
2021-03-13 15:09:41
177
原创 2021-3-12 大二周赛题解
A - 思维题<<<题目链接>>>本题关键在于将T-array[i]和arrary[i]分组考虑,而当arrary[i]*2==T时,将平均分配至两组为最优解。用map以及标记数组简单实现即可#include<bits/stdc++.h>using namespace std;typedef long long ll;map<int, int>m, vis;const int N = 100005;int ar[N];int a
2021-03-12 19:13:47
189
原创 区间dp的四边形优化问题
四边形优化首先我们先要了解满足四边形不等式 所需要的条件。当 a1<a2⩽b1<b2a1<a2\leqslant b1<b2a1<a2⩽b1<b2且有 m[a1,b1]+m[a2,b2]⩽m[a1,b2]+m[a2,b1]m[a1,b1]+m[a2,b2]\leqslant m[a1,b2]+m[a2,b1]m[a1,b1]+m[a2,b2]⩽m[a1,b2]+m[a2,b1]时,满足四边形不等式很显然,对于区间动态规划问题,上述不等式通常是成立的,因为a1~
2021-03-12 12:08:16
246
原创 快速找一个数的所有因子
假设给定一个数num, 取值范围为1≤num≤1091≤num≤10^91≤num≤109要求它的所有因子,例如当num=100时,则它的所有因子为:1,2,4,5,10,20,25,50,100如果一个个循环判断很显然会超时,这里可以优化一下,如果a是num的因子,那么num/a也是a的因子,在每一次循环的时候都将num/a加入数组,当然要注意num/a不等于a,以免重复加入。这样就可以把复杂度降为O(n)O(\sqrt{n})O(n)核心代码如下:int y(int a){ int now
2020-05-25 12:10:26
23531
5
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人