![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
模板
_zlWang
这个作者很懒,什么都没留下…
展开
-
KMP模板
const int N=1e6+10; //文本串长度 const int M=1e4+10; //模式串长度 char a[N]; //文本串 char b[M]; //模式串 int next0[M]; void find_next(){ int len=strlen(b); int k=-1; next0[0]=-1; int j=0; while(j<len)...原创 2018-01-10 20:41:18 · 175 阅读 · 0 评论 -
Tarjan算法 模板
// Tarjan算法 复杂度O(N+M) const int MAXN = 10010;//点数 const int MAXM = 100010;//边数 struct Edge{ int to,next;}edge[MAXM];int head[MAXN],tot; int Low[MAXN],DFN[MAXN],Stack[MAXN],Belong[MAXN];//Be...转载 2018-02-21 16:16:38 · 134 阅读 · 0 评论 -
计算几何 基本函数 模板
来自kuangbin的ACM模板//Point定义const double eps=1e-8;const double PI=acos(-1.0);int sgn(double x){ if(fabs(x)<eps) return 0; if(x<0) return -1; else return 1;}struct Point{ double x,y; ...原创 2018-04-12 17:11:12 · 182 阅读 · 0 评论 -
后缀自动机模板
出自kuangbin模板#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;const int CHAR=26;const int MAXN=100000+10;...转载 2018-07-17 17:04:30 · 211 阅读 · 0 评论 -
高斯消元模板
const double eps=1e-6;const int N=100+10;double a[N][N];int gauss(int n,int m){ int col,row,mxr; for(row=col=1;row<=n&&col<=m;row++,col++) { mxr=row; for(int i=row+1;i<=n;...原创 2018-07-14 20:26:22 · 289 阅读 · 0 评论 -
矩阵快速幂模板
typedef long long ll;const ll MOD=1e9+7;const int N=4;struct node{ ll a[10][10];};node shu,ans,mp;//shu是输入的矩阵,ans是所求答案node matrix(node x,node y){ for(int i=1;i<=N;i++) for(in...转载 2018-07-14 20:23:52 · 132 阅读 · 0 评论 -
K叉哈弗曼树构造算法
运用了类似归并排序的思想除了一开始给数组排序的O(nlogn)时间外,之后每次构造K叉树时间复杂度为O(n)typedef long long ll;const int N=1e5+10;int a[N],b[N];ll hafuman(int k,int len){ //sort(a,a+len); int a0=0,b0=0,b1=0; int num; ll ans...原创 2018-07-31 16:51:21 · 441 阅读 · 0 评论 -
最大/最小表示法 模板
求出字符串所有循环同构中字典序最大或最小的起始下标,如果有多个返回最小的那个int getMin(char s[],int len){ int i=0,j=1,k; while(i<len&&j<len) { for(k=0;k<len;k++) if(s[(i+k)%len]!=s[(j+k)%len]) break; if(k>...原创 2018-09-04 09:00:05 · 182 阅读 · 0 评论 -
回文树 模板
类似AC自动机,树里面每个节点代表主串的一个回文子串,且每个回文子串都不同主要功能:1.求串S前缀0~i内本质不同回文串的个数(两个串长度不同或者长度相同且至少有一个字符不同便是本质不同)2.求串S内每一个本质不同回文串出现的次数3.求串S内回文串的个数4.求以下标i结尾的回文串的个数参考链接:https://blog.csdn.net/yxuanwkeith/article/de...原创 2018-09-04 12:18:17 · 144 阅读 · 0 评论 -
卢卡斯定理 模板
卢卡斯定理模板用于快速求解C(n,m)%p,p为质数typedef long long ll;ll expow(ll a,ll b,ll mod){ ll ret=1; while(b) { if(b&1) { ret*=a; ret%=mod; } a*=a; a%=mod; b>>=1; } return ret;...原创 2018-09-03 13:39:27 · 168 阅读 · 0 评论 -
朱刘算法模板(最小树形图)
前向星存储结构题为UVA-11183 Teen Girl Squad#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<queue>using namespace std...原创 2018-10-30 13:01:15 · 228 阅读 · 0 评论 -
蔡勒公式模板
int zeller(int year,int month,int day) //蔡勒公式,计算这天是周几,公式只适合于1582年10月15日之后的情形{ int m,d=day; if(month<3) { m=month+12; year--; } else m=month; int c=year/100; int y=year%100; int w=(c/4)-2原创 2018-02-04 22:43:09 · 209 阅读 · 0 评论 -
Manacher模板
出处:http://blog.csdn.net/dyx404514/article/details/42061017const int maxn=1000010;char str[maxn];//原字符串char tmp[maxn<<1];//转换后的字符串int Len[maxn<<1];//转换原始串int INIT(char *st){ int i,len=strle转载 2018-02-04 10:47:55 · 124 阅读 · 0 评论 -
扩展KMP模板
const int N=1e5+10; //文本串长度const int M=1e5+10; //模式串长度char a[N]; //文本串char b[M]; //模式串int next0[M],extend[N];void get_next() { int len=strlen(b); next0[0]=len; int i=0; while(i<l原创 2018-02-02 12:18:21 · 150 阅读 · 0 评论 -
Kruskal模板
const int MAXN=100+10;const int MAXM=10000+10;int UF[MAXN];struct Edge{ int u,v,w;}edge[MAXM];int tol; //初始化为0 void addedge(int u,int v,int w){ edge[tol].u=u; edge[tol].v=v; edge[tol++].w=原创 2018-01-02 21:16:54 · 202 阅读 · 0 评论 -
SAP最大流模板
转自kuangbin代码//最大流SAPstruct Node{ int to,next,cap;}edge[MAXM];int tol;int head[MAXN];int gap[MAXN],dis[MAXN],pre[MAXN],cur[MAXN];void init(){ tol=0; memset(head,-1,sizeof(head));转载 2017-12-17 15:28:35 · 250 阅读 · 0 评论 -
SPFA模板
//SPFAint first[MAXN];bool vis[MAXN];int cnt[MAXN]; //入队次数int que[MAXN];int dist[MAXN];struct Edge{ int to,v,next;}edge1[MAXM]; //邻接表int tt;void add(int a,int b,int v) //添加边{ edge1[转载 2017-12-17 14:39:46 · 206 阅读 · 0 评论 -
线段树 模板
对于二叉树来说,2n是左子节点,2n+1是右子节点。建树复杂度为O(n),更新和查询的复杂度都是O(lgn)。要注意对一个区间进行更新的时候不需要一直更新到底,可以提高效率,需要的时候往下带就行。#define maxn 50000struct node{ int l, r, sum; int mid(){ return (l+r)/2; }转载 2017-10-30 09:34:03 · 171 阅读 · 0 评论 -
树状数组模板
可以快速求区间和等问题,查询更新复杂度都是lgn, 常数比线段树低。一维树状数组:long long c[100010];int n;inline int lowbit(int x) { return x & -x;}void update(int idx, int v) { while (idx <= n) { c[idx] += v;转载 2017-10-30 09:29:01 · 164 阅读 · 0 评论 -
中国剩余定理(孙子定理)模板
中国剩余定理(孙子定理)一个数x,对于几个互质的数w[i],余数分别为a[i],求x最小解模板如下://扩展欧几里得算法 ll Extended_Euclid(ll a,ll b,ll &x,ll &y){ int d; if(b==0) { x=1;y=0; return a; } d=Extended_Euclid(b,a%b,x,y); ll temp=x转载 2017-08-18 18:45:27 · 305 阅读 · 0 评论 -
欧拉函数
欧拉函数在数论,对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1)。例如φ(8)=4,因为1,3,5,7均和8互质。通式:其中p1, p2……pn为x的所有质因数,x是不为0的整数。一个数的所有质因子之和等于φ(n)*n/2直接求解:int euler(int n){ int res=n,a=n;原创 2017-08-18 10:26:33 · 411 阅读 · 0 评论 -
扩展欧几里得模板
扩展欧几里得模板int e_gcd(int a, int b, int& x, int& y){ if(b == 0){ x = 1; y = 0; return a; } int ans = e_gcd(b, a%b, y, x); y -= x*(a/b); return ans;}原创 2017-08-18 10:01:43 · 152 阅读 · 0 评论 -
Trie树模板
#define idx(x) x-'a'; //小写字母 const int MAXN=1e6; //最大节点数 struct Trie{ int next[26]; //限于小写字母或大写字母 int val;}tree[MAXN];int nxt,T;int Add() //分配数组地址 { memset(&tree[nxt],0,sizeof(Trie)); ret原创 2018-02-04 10:24:38 · 192 阅读 · 0 评论 -
UVA-10766 Organising the Organisation
生成树计数模板题发现这个的模板有很多种,有的套上来时WA,有的能AC因为自己不懂怎么求行列式,看不出有什么问题,赶紧补习一下#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<...原创 2018-10-30 21:12:53 · 236 阅读 · 0 评论