
ACM模板
Baiyi_destroyer
记录过,回望来时路
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
判断两三角形是否相交(模板)
#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>using namespace std;const double eps=1e-8;const double pi=acos(-1.0);int sgn(double x){ if (fa...转载 2018-07-31 11:26:39 · 1901 阅读 · 0 评论 -
矩阵快速幂求斐波那契(模板)
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int MOD=10000;struct mat{ ll a[2][2];};mat mat_mul(mat x,mat y){ mat res; memset(res.a,0,sizeof(res.a))...原创 2018-05-26 18:43:21 · 1348 阅读 · 0 评论 -
错位排序公式
首先,对于D(n),有1~n这样n个元素错排,所以对于第一个元素①,它现在可能的位置有(n-1)个,倘若它在第k个元素的位置上,对于第k个元素而言,它所在的位置就有两种可能—第一种,它处在非第一个元素①位置上,所以对于接下来的排列就相当于是n-1个元素的错排,即D(n-1);第二种,它处在第一个元素①的位置上,所以在排列D(n)中有两个元素找到了位置,那么接下来的队列就相当于是n-2个元素的错排。...原创 2018-07-01 20:03:29 · 12121 阅读 · 0 评论 -
尺取法模板
int chiqu(){ int l = 0,r = 0; int ans = 0,len = MAXN; while(true) { while(r <= n && ans < S) r ++,ans += num[r]; if(ans < S) break; ...转载 2018-07-17 19:24:26 · 628 阅读 · 0 评论 -
最长上升子序列(LIS)(模板)
最长递增子序列(Longest Increasing Subsequence)下面我们简记为:LIS。假设存在一个序列d[1..9] = 2 1 5 3 6 4 8 9 7,我们可以很轻松的看出来它的LIS长度为5。但是如果一个序列太长后,就不能直接看出来了! 下面我们试着逐步找出答案。我们定义一个序列B,然后令 i = 1 to 9 逐个考察这个序列。此外,我们用一个变量...转载 2018-07-23 20:58:53 · 175 阅读 · 0 评论 -
最长公共子序列【模板】
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int dp[1005][1005];char s1[1005],s2[1005];int LCS(){ int len1,len2,i,j; len1=strlen(s1); ...转载 2018-07-23 21:01:27 · 155 阅读 · 0 评论 -
关于lower_bound和upper_bound
共同点函数组成:一个数组元素的地址(或者数组名来表示这个数组的首地址,用来表示这个数组的开头比较的元素的地址,不一定要是首地址,只是用于比较的“首”地址)+ 一个数组元素的地址(对应的这个数组里边任意一个元素的地址,表示这个二分里边的比较的”结尾’地址)+ 你要二分查找的那个数。例如:lower_bound(r[x].begin(),r[x].end(),l)upper_bou...转载 2018-07-23 21:02:56 · 287 阅读 · 0 评论 -
卡特兰数与默慈金数
卡特兰数模板:#include<iostream>#include<cstdio>#include<cmath>#include<cstring>using namespace std;const long long mod=1000000007;long long n;long long ans[1100000],ni[110...转载 2018-07-24 11:53:48 · 309 阅读 · 0 评论 -
高斯消元模板
kuangbin大牛的模板 #include<stdio.h> #include<algorithm> #include<iostream> #include<string.h> #include<math.h> using namespace std; const int MA...转载 2018-07-25 17:23:48 · 154 阅读 · 0 评论 -
线段数模板
单点更新:#include<cstdio>#include<iostream>#include<string>#include<cmath>using namespace std;const int MAXNODE = 1 << 19;const int MAX = 2e5 + 10;typedef struct No...转载 2018-07-30 16:04:26 · 320 阅读 · 0 评论 -
高斯消元模板
#include<stdio.h>#include<algorithm>#include<iostream>#include<string.h>#include<math.h>using namespace std;const int MAXN=50;int a[MAXN][MAXN];//增广矩阵int x[M...转载 2018-08-09 10:32:48 · 169 阅读 · 0 评论 -
欧拉函数模板
#include <iostream> using namespace std; #define N 100000001 int euler(int n) { int ans=1; int i; for(i=2;i*i<=n;i++) { if(n%i==0) { ...原创 2018-09-11 17:51:02 · 143 阅读 · 0 评论 -
快速幂模板
一般地,一元n次多项式的求值需要经过(n+1)*n/2次乘法和n次加法,而秦九韶算法只需要n次乘法和n次加法。在人工计算时,一次大大简化了运算过程。该算法看似简单,其最大的意义在于将求n次多项式的值转化为求n个一次多项式的值。在人工计算时,利用秦九韶算法和其中的系数表可以大幅简化运算;对于计算机程序算法而言,加法比乘法的计算效率要高很多,因此该算法仍有极大的意义,对于计算机来说,做一次乘...转载 2018-04-10 23:21:53 · 138 阅读 · 0 评论 -
基姆拉尔森计算公式(根据日期判断星期几)
//基姆拉尔森计算公式根据日期判断星期几void CalculateWeekDay(int y, int m,int d){ if(m==1||m==2) m+=12,y--; int iWeek = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; switch(iWeek){ case 0: printf("星期一\n"); break; ...转载 2018-09-28 20:51:29 · 987 阅读 · 0 评论 -
C++中unique函数的作用(去重)
个人感觉,unique是STL中很实用的函数之一,需要#include<iostream>,下面来简单介绍一下它的作用。unique的作用是“去掉”容器中相邻元素的重复元素,这里去掉要加一个引号,为什么呢,是因为它实质上是一个伪去除,它会把重复的元素添加到容器末尾,而返回值是去重之后的尾地址(是地址!!),举个例子: int num[10]={1,1,2,2,2,3,4,...转载 2018-10-09 20:01:14 · 720 阅读 · 0 评论 -
大数阶乘
#include <iostream>#include <cstdio>using namespace std;typedef long long LL;const int maxn = 100010;int num[maxn], len;/* 在mult函数中,形参部分:len每次调用函数都会发生改变,n表示每次要乘以的数,最终返回的是结果的长度 tip: 阶...转载 2018-04-28 23:33:38 · 151 阅读 · 0 评论 -
大数加法
string add1(string s1, string s2){ if (s1 == "" && s2 == "") return "0"; if (s1 == "") return s2; if (s2 == "") return s1; string maxx = s1, minn = s2; if (s1.length() &转载 2018-04-28 22:33:04 · 143 阅读 · 0 评论 -
KMP模板
感谢 kuangbin大神 http://www.cnblogs.com/kuangbin/archive/2012/08/14/2638803.html该算法时间复杂度是O(m+n), 得到Next数组的过程是O(n)/*pku3461(Oulipo), hdu1711(Number Sequence)这个模板 字符串是从0开始的Next数组是从1开始的*/#inc...转载 2018-04-26 19:51:58 · 147 阅读 · 0 评论 -
二叉树遍历模板(分别出先序,中序,后序)
#include<stdio.h>#include<iostream>#include<math.h>#include<string.h>#include<algorithm>using namespace std;#define ll long longtypedef char Elemtype;typedef stru...原创 2018-04-21 14:54:37 · 240 阅读 · 0 评论 -
快排
C:qsort要加上头文件#include< stdlib.h > 1.对int一维数组快速排序(char 类似)#include<stdio.h>#include<stdlib.h>int cmp( const void *a,const void *b){ return *(int *)a-*(int *)b;}int ...转载 2018-03-26 18:40:33 · 413 阅读 · 0 评论 -
辗转相除法求最大公约数及最小公倍数
int gcd(int a,int b){ return b == 0?a:gcd(b,a%b);}int lcm(int a,int b){ return a/gcd(a,b)*b; //先除后乘防止a*b溢出}转载 2018-04-25 21:26:15 · 242 阅读 · 0 评论 -
求区间[m,n]内的素数( 埃氏筛选法)
int m = sqrt(n+0.5);memset(vis,0,sizeof(vis));for (int i = 2; i <= m; i++){ if (!vis[i]) { for (int j = i*i; j <= n; j += i) { vis[j] = 1; } }} 版本二O(nlog...转载 2018-04-25 21:31:11 · 1056 阅读 · 0 评论 -
快速乘~快速幂
快速乘LL mod_multi(LL x,LL y,LL mod) //拆分成y个x相加{ LL res = 0; while (y) { if (y&1) { res += x; while (res >= mod) res -= mod; } x += ...转载 2018-04-25 21:33:53 · 156 阅读 · 0 评论 -
二分查找
// binsearch_min 返回key(可能有重复)第一次出现的下标,如无return -1 int binsearch_min(int * arr, int lef, int rig, int key){ if(!arr) return -1; int left = lef, right = rig; while(left < right) { ...转载 2018-04-25 21:52:54 · 187 阅读 · 0 评论 -
并查集
并查集的模板 最简单的那种并查集初始化#include<stdio.h>int father[1005];void init(int m){int i;for(i=1;i<=m;i++) father[i]=i;}并查集找根(不改find father 不进行压缩)int find(int x){while(x!=father(x)) x=fa...转载 2018-04-25 21:53:38 · 206 阅读 · 0 评论 -
生成1~n的排列
void permutation(int n,int *A,int cur){ if (cur == n) //递归边界 { for (int i = 0;i < n;i++) printf("%d ",A[i]); printf("\n"); } else for (int i = 1;i <...转载 2018-04-25 22:03:54 · 242 阅读 · 0 评论 -
拓展欧几里德算法
扩展欧几里德算法用来在已知a,b求解一组x,y使得a*x+b*y=gcd(a,b)(解一定存在,根据数论中的相关定理)扩展欧几里德常用在求解模线性方程及方程组中(1)void extgcd(__int64 a,__int64 b,__int64 &x,__int64 &y){ if (!b) { x = 1; ...转载 2018-04-25 22:06:01 · 134 阅读 · 0 评论 -
数论知识点
唯一分解定理任何大于1的自然数,都可以唯一分解成有限个质数的乘积对于数aa=p1^e1*p2^e2*......pk^ek,pi为素数且p1<p2<...<pka的总因子个数为(e1+1)*(e2+1)*(e3+1).....(ek+1)...转载 2018-04-26 19:39:01 · 184 阅读 · 0 评论 -
第二类斯特林数
第二类斯特林数是将n个不同的球放入m个无差别的盒子中,并且要求盒子非空的方案数。1.通项公式为:2.递推公式: 证明如下:假设要把n+1个球放入m个盒子里则分析如下:(1)如果n个球放入了m-1个盒子,那么第n+1个球单独放入一个盒子。方案数 。(2)如果n个球已经放入了m个盒子,将第n+1个球放入到任意一个盒子。方案数 m*S(n,m) 。综合两种情况得: 代码如下:LL stl2[5010]...转载 2018-04-26 19:42:03 · 523 阅读 · 0 评论 -
逆元模板
逆元是求ax≡1(mod p)中的x的最小正整数,常应用于 除法取模。 存在这样的x的条件是a与p互素,即只有当a与p互素时,逆元存在 求逆元有三种常用的方式 扩展欧几里德(要求a与p互素)int extgcd(int a, int b, int &x, int &y)//有返回值{ int d = a; if(b != 0) ...转载 2018-04-26 19:46:29 · 460 阅读 · 0 评论 -
判断两条线段是否相交
摘自 https://www.cnblogs.com/Duahanlang/archive/2013/05/11/3073434.html #include<cstdio>#include<iostream>#include<cstring>using namespace std;#define cs const#define cp const P&...转载 2018-04-26 19:48:59 · 289 阅读 · 0 评论 -
母函数模板
大佬关于母函数的介绍 http://www.cnblogs.com/hsqdboke/archive/2012/04/17/2453677.html http://www.cnblogs.com/magicsoar/p/4129414.html贴一下模板,按自己的习惯改了一点.母函数模板(HDU1028)...转载 2018-04-26 19:50:10 · 311 阅读 · 0 评论 -
优先队列
优先队列:优先队列不同于一般队列的是,队列中的元素按照某项特征值的大小进行排列.优先队列的操作命令也与队列不同,队头元素为Q.top().讲解详细的博客:http://www.cnblogs.com/heqinghui/archive/2013/07/30/3225407.html一般的优先队列 priority_queue<int,vector<int>,greater&...转载 2018-04-26 19:51:04 · 146 阅读 · 0 评论 -
BFS&DFS模板代码
#include<cstdio>#include<cstring>#include<queue>#include<algorithm>using namespace std;const int maxn=100;bool vst[maxn][maxn]; // 访问标记int dir[4][2]= {0,1,0,-1,1,0,-1,0...原创 2018-11-22 20:03:11 · 889 阅读 · 0 评论