摘要:
优秀资料 素数 这个很好写。我们可以很好的理解埃氏筛,然后加一些优化即可得到线性筛。 inline void get_pri(int n){ for(int i=2;i<=n;++i) not_pri[i]=0; not_pri[1]=1; for(int i=2;i<=n;++i){ if(!no 阅读全文
摘要:
我们对于一个要求的数论函数 $f(x)$,定义 $S(n)=\sum_{i=1}^nf(x)$ 然后我们考虑构造一个 $S(n)$ 关于 $S(\lfloor\frac{n}{i}\rfloor)$ 的一个递推式子。 我们发现,对于任意的一个数论函数 $g(x)$ ,我们有: $$\sum_{i=1 阅读全文
摘要:
筛选素数 枚举每个数,并枚举它的倍数,给它的倍数打上非质数标记 用bitset存储标记会加速一倍,空间开销小一倍 { pri[1]=1; for(int i=2;i<=n;i++) { if(!pri[i]) { for(int j=2;i*j<=n;j++) { pri[i*j]=1; } } } 阅读全文
摘要:
优点: 1.回带比原版高斯消元少,速度更快(一般情况下) 2.精度更好 3.代码实现更简单 代码如下:模板P3389 #include<bits/stdc++.h> using namespace std; #define file(a) freopen(#a".in","r",stdin),fre 阅读全文
摘要:
前置知识 矩阵乘法 矩乘快速幂 领接矩阵k次方的意义 因为我不知道怎么证明这个,就直接告诉你,若 \(A\) 是一个领接矩阵,那么 \(A^{n}_{i,j}\) 的意义为点 i,到达点 j 长度为 k 的路径数量。 是不是看着就觉得很好用 但是很显然 k 比较大的时候我们不可能一层一层乘上去。所以 阅读全文
摘要:
封装一个矩阵,带乘法,加法和清空 struct matrix { int n,m; long long a[N][N]; friend matrix operator * (matrix x,matrix y) { matrix c; c.n=x.n;c.m=y.m; c.clear(0); for 阅读全文
摘要:
维护半平面交 这个我喜欢读(tu1 ke2)。我们先从简单的入手。 这个分为上凸壳和下凸壳。顾名思义就是一个维护多条函数的最大值,一个维护最小值。 这个我们有一个例题 水平可见直线 其实是因为考场上没学但是写出来了而作为纪念找到的!(虽然那道题还是因为没调完爆零了/kk) 我们考虑按照每条直线的斜率 阅读全文
摘要:
用于处理矩形覆盖问题,因为是线段树实现所以拥有 \(O(nlogn)\) 的复杂度。 主要思想是虚拟出一条平行与 x 或 y 轴的无限长的线,我们称之为扫描线。一路扫过去,如果发现触碰到矩形的边(被当前扫描线完全覆盖)就停下进行相关操作。 1 "对于点的坐标太大,不就变成暴力一样的的东西啦?" 对于 阅读全文
摘要:
简单讲一下极角排序。 我们对于极角排序,就是以x轴为始边,然后到当前点所在的终边,以原点为顶点所形成的角来排序。第二关键字按照到原点的距离。 tan2极角排序 我们把坐标放入 $tan2(y,x) $ 就可以得到极角了。返回的范围是 \([-\pi,\pi]\) 其中c是我们想要以其为中心进行极角排 阅读全文
摘要:
废话不多说,直接入正题。 误差 const db eps=1e-9; inline int sgn(T x){ return x<-eps?-1:x<eps?0:1; } 我们浮点数计算计算几何的时候是存在误差的,我们用上面这个函数来修正。 对于 \(x < -eps\) ,我们认为它属于负数,返回 阅读全文