
算法模板
ACgay_caoyue
菜鸡*CPCer
展开
-
【2019ICPC徐州 E.Multiply】Pollard_Rho进行1e18质因子分解
题目链接分析经过观察可以发现,不考虑数字的大小的话,就可以对所有的数进行质因数分解,然后最后的答案就是所有质因子差里面最小的那个(这里就要有疑问了,题目说求的是最大的i,可是为什么最后要取最凶的那个呢?其实很简单:因为超过差的话,就不能整除了。)但是,现在的数字很大, 甚至还出现了1e18的阶乘,那怎么办呢?首先,我们要先请出一号选手:阶乘质因数分解。1.对于两个数n和m,求n!里面有多...原创 2019-12-11 11:19:59 · 905 阅读 · 0 评论 -
【牛顿迭代法求函数的一个零点】模板
见代码:注释也很明了/*牛顿迭代法求方程的一个零点设f2(x)为f(x)的导数任取x,方程的零点即为x=x-f(x)/f2(x)循环几百次就可以得出一个零点。 */#include <bits/stdc++.h>using namespace std;const int maxn = 100;double f(double x){ return x*x+2*x+...原创 2019-08-19 21:11:01 · 1867 阅读 · 1 评论 -
【求逆矩阵】模板 洛谷P4783
模板题目输入一个n*n的矩阵,若可逆,求其逆矩阵。#include<bits/stdc++.h>using namespace std;const int maxn = 405;const int mod=1e9+7;int n;struct Matrix{ int a[maxn][maxn]; inline void clr(){memset(a,0,...原创 2019-08-19 21:26:28 · 243 阅读 · 0 评论 -
【康托展开 & 逆康托展开】求一个排列在全排列中的排名 洛谷P5367 & 给定一个排名求排列
题目在这里求一个排列在全排列中的排名。好像是一个比较经典的问题,类似的问题还有,求子串的排名等等 我在胡说什么康托展开说白了就是一个hash方法。方法如下:ans = 1+sigma(a[i]*(n-i))例如:对于一个排列 1 2 3 4 5其进制变换后就是 (0 0 0 0 0)对于另一个排列 1 4 5 2 3其进制变换后就是(0 2 2 0 0)为啥呢?构造方法如下:...原创 2019-08-20 09:50:52 · 520 阅读 · 0 评论 -
【Link Cut Tree 模板】洛谷P3690 动态树 LCT 模板
题目戳这里本模板是从网上复制来的。操作如下:access(x,y),将x到y的路径连上实边,其他儿子都变成虚边。link(x,y),将x和y连起来。cut(x,y),将x和y断开。对于修改操作,若将点x的权值修改成y,只需splay(x)然后v[x] = y即可。findroot(x)==findroot(y)表示连通。makeroot(x)表示将x选为跟。split(x,y),...原创 2019-08-20 13:50:30 · 225 阅读 · 0 评论 -
【后缀自动机模板 | 洛谷P3804】后缀自动机 SAM
模板题本文只是放上后缀自动机的模板,并不会对后缀自动机的原理进行讲解。首先放上模板:#include <bits/stdc++.h>#define sc(n) scanf("%d",&n)#define pt(n) printf("%d\n",n)#define rep(i,a,b) for(int i=a;i<=b;i++)#define vi vecto...原创 2019-08-15 11:23:35 · 327 阅读 · 0 评论 -
【不同子串的个数】后缀自动机 SAM
题目感觉这个才应该是后缀自动机的模板题啊由定义可知,字符串中不同子串的个数就是sigma(len[i]-len[fa[i]])如果由定义没看出来的话,就可以画一画,如果还是没看出来的话,那就背下来吧qwq就是个板子#include <bits/stdc++.h>using namespace std;const int maxn = 2e6+7;struct node...原创 2019-08-15 11:40:42 · 334 阅读 · 0 评论 -
【hihoCoder 1449】后缀自动机 SAM
题目很好懂分析:类似于洛谷P3804,这个题目只需要用一个map在dfs parent tree的时候记录每个长度的siz的最大值,然后直接输出就做完了。#include <bits/stdc++.h>using namespace std;const int maxn = 2e6+7;struct node{ int ch[26]; int len,fa;}poi...原创 2019-08-15 11:51:16 · 254 阅读 · 0 评论 -
【杜教筛模板】洛谷P4213
P4213Attention本题极度卡常,不需要long long的情况下尽量使用int,mu函数不需要使用long long。原创 2019-08-25 11:29:46 · 399 阅读 · 0 评论 -
【线性基模板】洛谷P3812
洛谷P3812线性基模板题。其实线性基就是把一个数字拆成二进制后的(0/1)组成基向量。构造线性基后的值域和原值域相同。所以直接从高位枚举最大值即可。#include <bits/stdc++.h>#define sc(n) scanf("%d",&n)#define pt(n) printf("%d\n",n)#define rep(i,a,b) for(int...原创 2019-09-03 08:39:09 · 259 阅读 · 0 评论 -
【凸包交模板】
/*分别读入两类点。判断凸包交 */ #include <bits/stdc++.h>using namespace std;const double eps = 1e-8;const double pi = acos(-1.0);class Point {public: double x, y; Point(double x = 0, double ...原创 2019-09-03 15:10:11 · 229 阅读 · 0 评论 -
【EXCRT模板】
防止爆long long 使用了慢速乘,结果T了。然后换成普通乘就过了…这数据也太假了,n<=1e15,很有可能爆long long 的啊…反正是EXCRT的板子题…#include <bits/stdc++.h>#define sc(n) scanf("%d",&n)#define pt(n) printf("%d\n",n)#define rep(i,a...原创 2019-09-09 15:04:16 · 310 阅读 · 0 评论 -
【费用流模板】
//电子科大的板子真香#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef unsigned long long ull;typedef pair<int, int> pii;const int maxn = 1e4;const int INF = 0x7fffffff...原创 2019-09-17 15:30:29 · 220 阅读 · 0 评论 -
【支配树模板】
支配树模板题注:本文均从网络上摘抄首先介绍一下什么叫支配树。1.支配点:在有向图中,若删除了点x,u到v不连通了,那么称x支配v。2.支配树:满足树上一个点x的所有祖先都是它的支配点的树。下面介绍一下一般有向图的支配树构建方法:下面化还是一些名词解释:1.dfs数:从图的一个点S开始dfs整张图,可以提取出一颗dfs树,并且记x的dfs序为dfn[x]。2.半支配点:假设存...原创 2019-09-17 18:08:12 · 291 阅读 · 0 评论 -
【BZOJ2120】带修改莫队模板
BZOJ2120普通莫队一般是不带修改的,但是有一些题目是需要修改的…比如BZOJ2120。这题如果没有修改,那大概就是个莫队裸题,但是它现在带修改了,就需要一些操作了。我们把对于询问的结构体记录一个上一次的修改,例如第5次询问是在第3次修改之后进行的。那么如果我们需要询问第5次询问,现在修改还在第1次,我们就把修改改成2,3次之后,再进行询问就可以了。思想上还是莫队。#include...原创 2019-09-20 09:10:06 · 216 阅读 · 0 评论 -
【无向图割点模板】
很久没有更新博客了,主要是时间不允许…然后昨天复现了CCPC秦皇岛的题目,发现一个点双的题写了俩小时…遂学习一下点双和边双和强连通分量。求割点模板还是tarjan,分为两种情况:1.选一个节点为根,从该点进行tarjan,如果这个点有>=2个子树,那么一定是割点。2.否则low[v]>=dfn[u],且u不为root,则u为割点。下面是代码:#include <bi...原创 2019-10-08 14:00:19 · 246 阅读 · 0 评论 -
【Gauss消元】求线性方程组的解 洛谷P3389
题目戳这里高斯消元模板输入格式如下:na1 a2 a3 … an b1共n个线性方程构成的方程组输出:ans[i]表示x[i]/*Gauss消元给定线性方程组a11*x1+a12*x2+...+a1n*xn=b1a21*x1+a22*x2+...+a2n*xn=b2...an1*x1+an2*x2+...+ann*xn=bn求x1,x2...xn O(n^3) */...原创 2019-08-19 21:03:46 · 228 阅读 · 0 评论 -
【半平面交】洛谷P4196 模板
题目在这里题目求解的是很多多边形的交的面积。其实很多多边形就是很多线段,由于是逆时针给出的点,所以也就是很多线段的左半平面。故直接半平面交即可。求出凸壳后用三角剖分求出面积即可。本代码是复制洛谷题解里面的,当作模板使用。#include <bits/stdc++.h>using namespace std;const int maxn = 505;const doub...原创 2019-08-19 20:19:29 · 287 阅读 · 0 评论 -
【求平面上最远点对】旋转卡壳模板 POJ2187
题目戳这里Attention本文不涉及旋转卡壳的原理和思路,想看原理和思路的请寻找其他的博客。求平面上最远点对,显然,最远的点对一定在凸包上。所以我们先求一个凸包。然后旋转卡壳就可以求出来最远点对了。旋转卡壳说白了就是逆时针枚举凸包上的边和相对点,然后更新答案即可。#include <cstdio>#include <cmath>#include <...原创 2019-08-19 15:26:14 · 239 阅读 · 0 评论 -
splay模板
代码来自洛谷日报,感谢洛谷本篇文章没有splay的教学,只有代码的使用说明。直接贴上代码:#include &amp;amp;lt;bits/stdc++.h&amp;amp;gt;#define INF 0x3f3f3f3fusing namespace std;const int maxn = 2e5+7;int n, op, x;int ch[maxn][2], fa[maxn], val[maxn], c...原创 2019-01-24 22:15:07 · 241 阅读 · 0 评论 -
POJ 3614 最小树形图
double zhuliu(){ bool vis[maxn],flag[maxn]; int pre[maxn]; double sum=0; for(int i=0;i&amp;lt;n;i++) { flag[i]=false; mp[i][i]=inf; } pre[0]=0; int i,j,k;...原创 2019-01-24 20:56:50 · 188 阅读 · 0 评论 -
原根
首先,笔者要给大家介绍一下,什么叫原根。设g是奇素数m的一个原根,则g1 mod m , g2 mod m , g3 mod m , … , gm-1 mod m 两两不同。并且其结果恰好为1 ~ m-1。下面是原根的求法以及其性质:模数m有原根当且仅当 m = 2,4,pa, 2*pa这四种。其中p是奇素数。求素数m原根的方法:对m-1进行质因数分解,即m-1 =p1a1p2a2p...原创 2019-02-28 10:53:16 · 1214 阅读 · 0 评论 -
【蓝桥杯有点意思】图的最优着色
图的最优着色问题,链接在这里这题是一个蓝桥杯的题。(蓝桥杯的题都挺裸的)很明显直接就能看出来这是一个图的最优着色问题。我们只需要枚举一下当前的同学,在某一个考场内有没有冲突即可,数据只有100,所以也没有什么问题。下面我们在分析一下算法流程:对于当前同学,我们枚举一下现有的教室,如果教室内的人都与他没有冲突,那么当前同学就可以放在这个教室里面,如果现有的教室全部都有冲突,那么我们就可以给...原创 2019-02-24 15:11:53 · 276 阅读 · 0 评论 -
【蓝桥杯有点意思】除法模运算
题解戳这里又是蓝桥杯的题目,蓝桥杯的题目有点意思。考虑到有些读者可能看不到这个题目,我就简单说一下题意。【求a/b小数点后第n位的三个数】啥意思呢,比如a=1,b=8,n=1,则a/b = 0.125,小数点后第n位的三个数就是125乍一看,好像是个高精度除法的题目。我也确实写的高精度可是仔细一想,这个题不就是求(a/b)10n+2 mod 1000嘛。可以除法取模运算还要求逆元,而...原创 2019-02-24 16:08:57 · 712 阅读 · 0 评论 -
【模板】三分查找 wannafly挑战赛16 AB序列
题目地址在这里啦前言二分查找大家一定都会,不会的话可以看我的这篇博客:二分+dijkstra具体来说,二分查找的前提是答案满足单调性,大家一定知道什么叫单调性吧!正文与大家熟悉的二分查找不同的是,三分查找需要满足查找的函数是一个有最值的函数(凸性函数),而且我们需要查找的就是给定区间上的最值。我们怎么做三分查找呢?现在读者可以自己在纸上画一画一个二次函数,如果你想求它的最值,用计算...原创 2019-03-05 10:55:54 · 217 阅读 · 0 评论 -
【拉格朗日插值模板】
没错,这几天不学无术,只会抄板子…这又是一篇板子记录贴…拉格朗日插值,食用方法如下:拉格朗日插值模板题由小学知识可知,n个点(xi,yi)可以唯一地确定一个多项式。现在,给定n个点,请你确定这个多项式,并将k代入求值。求出的值对998244353取模。直接输入n个点的坐标,然后调用lglr(k)即可把k带入求值。#include<bits/stdc++.h>using...转载 2019-07-24 11:31:43 · 260 阅读 · 0 评论 -
【FWT模板】快速沃尔什变换模板
没错,还是一个板子博客…快速沃尔什变换。使用方式如下:快速沃尔什变换模板给定长度为2n 的两个序列A,BC[i]=∑j⊕kA[j]B[k]C[i] = \sum_{j\oplus k} A[j]B[k]C[i]=∑j⊕kA[j]B[k]其中 ⊕\oplus⊕ 分别为 or,and,xor 时求出C。FMT() 为 orFWTand() 为 andFWTxor() 为 xor#...转载 2019-07-25 19:37:01 · 249 阅读 · 0 评论 -
【珂朵莉树模板】
#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e5+7;const int mod = 1e9+7;ll qpow(ll a, ll b, ll mod){ ll tmp = a % mod; ll ans = 1; while(b)...转载 2019-07-25 23:05:19 · 340 阅读 · 0 评论 -
【Chtholly Tree模板】珂朵莉树模板
这是一篇板子…首先,在2019年7月25号晚上,我花了将近四个小时才明白,我的快速幂是错的。快速幂在运算前,需要先将a取模,然后才能不爆long long。ll qpow(ll a, ll b, ll mod){ ll tmp = a % mod; ll ans = 1; while(b) { if (b&1) ans = ans*tmp...转载 2019-07-26 08:18:57 · 475 阅读 · 0 评论 -
【快速读入】
快速读入模板inline int read() { char ch = getchar(); int x = 0, f = 1; while(ch < '0' || ch > '9') { if(ch == '-') f = -1; ch = getchar(); } while('0' <...原创 2019-08-04 15:30:07 · 321 阅读 · 1 评论 -
【NTT模板】
没错,这就是我在网上找的一份NTT的板子…使用方法如下:多项式乘法模板求多项式乘法,A数组存第一个多项式的系数B数组存第二个多项式的系数也就是读入啦!然后直接穿solve(A,B),最后答案就会在A里面啦!直接输出就好了。#include <bits/stdc++.h>using namespace std;typedef long long ll;const ...转载 2019-07-22 22:44:10 · 313 阅读 · 0 评论 -
【任意模数NTT模板】
没错,这又是一个板子…使用方法如下:任意模数NTT模板题输入A,B和模数然后放进solve里面,就可以输出结果啦!!!#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 5e5+7, mm[3]={7*(1<<26)+1,998244353,479...转载 2019-07-22 23:07:35 · 319 阅读 · 0 评论 -
【hihoCoder 1457】SAM+拓扑排序
题目在这里题意就不赘述了。分析:设cnt[i]表示状态i共有多少串。那么sum[i]表示状态i的贡献。那么答案就是sigma(sum[i])cnt[i]怎么求呢,建立完SAM后对于每一个状态建立拓扑图。且若在拓扑图上有状态x到状态y的边。然后拓扑排序的时候记录cnt[i],具体就是若x->y有边,则cnt[y] += cnt[x]。则对于当前字符ch,有sum[y] += ...原创 2019-08-18 20:48:02 · 255 阅读 · 0 评论 -
【Graham Scan 求凸包】洛谷P2742 模板
模板题目在这里Attention本文不会讲解任何Graham Scan算法的思路和过程。p[i]表示第i个点。H[i]表示凸包上第i个点。tot表示凸包上最后一个点的标号。注:tot从0开始。cp是向量叉积dist是两点之间欧几里得距离#include <bits/stdc++.h>#define sc(n) scanf("%d",&n)#define p...原创 2019-08-19 13:34:19 · 270 阅读 · 0 评论 -
偏序的问题&&CDQ分治
偏序,相信大家应该都听说过。简单地说(不严谨的说),偏序就是满足【自反性】【反对称性】【传递性】的关系。那么偏序具体是什么呢,举个例子:有理数上的小于等于关系就是一个偏序关系。如果我们只将数进行两两对比,如果&amp;amp;lt;a,b&amp;amp;gt;是一个偏序集中的元素。(1) a&amp;amp;lt;=a显然成立(2)若a&amp;amp;lt;=b且b&amp;amp;lt;=a,那么a=b(3)a&原创 2019-01-11 19:13:27 · 775 阅读 · 0 评论