
模板
文章平均质量分 88
smiling~
努力会被看得到的
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
欧拉函数模板
自用模板0.01.直接求小于或等于n,且与n互质的个数:int euler(int n){ int ret=1,i; for(i=2;i*i<=n;i++) { if(n%i==0) { n/=i,ret*=i-1; while(n%i==0) n/=i,ret*=i; ...原创 2019-06-05 22:05:31 · 137 阅读 · 0 评论 -
基础线段树+树状数组模板
自用模板0.0#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int N = 5e4+5;int sum[N<<2],lazy[N<<2];int a[N],n;void pushup(int x){ sum[x]...原创 2019-08-04 19:58:45 · 223 阅读 · 0 评论 -
求逆序对的数量--模板(归并排序 / 离散化线段树)
题目链接 : https://vjudge.net/problem/POJ-2299求逆序对的数量就是从前往后求每一个数前面比它大的数的数量之和。做法1:归并排序基本思想:归并排序的核心思想是分治,每次左右两区间分别排完序后有一个合并的过程,分别用指针i,j指向两边的头(即i=l, j=mid+1),分别往后扫,每次取出两个指针所指的数中较小的放入数组。而逆序数也可以分治求 逆序数总数 ...原创 2019-08-04 19:56:35 · 335 阅读 · 0 评论 -
最小生成树模板(prim+kruskal)
1.prim算法(稠密图适用–O(n^2))#include<iostream>#include<cstring>#include<algorithm>using namespace std;#define inf 0x3f3f3f3f#define N 505int n,m;int mp[N][N];int dis[N],vis[N];in...原创 2019-08-01 11:20:50 · 1053 阅读 · 1 评论 -
米勒罗宾素数检测法
适用范围:较大数的较快素性判断原理是费马小定理:如果p是素数,则a ^ (p-1)%p == 1,加上二次探测定理:如果p是一个素数,则x^2%p==1的解为,则x=1或者x=n-1。一次检测中:主要是把一个数n的n-1分解成d*2^ r的形式,其中d为奇数,正向过程是a^ n%p如果是1,就继续分解a^ (n/2)%p,(a为一个与n互素的数)看是否为1,;如果是n-1就停止分解,说明至...原创 2019-08-02 11:29:53 · 2852 阅读 · 0 评论 -
快读+o3氧化模板
哦豁,自用模板0.0#pragma GCC optimize(3) //2const int N =1005;int dp[N][N];int v[N],w[N];template<class T>void read(T &x){ x=0;int f=0;char ch=getchar(); while(ch<'0'||ch>'9') ...原创 2019-08-11 09:32:13 · 125 阅读 · 1 评论 -
中国剩余定理/扩展中国剩余定理 -----模板
1.中国剩余定理(模数两两互质)int a[N],m[N];int china(int n){ int M=1,ans=0; for(int i=0;i<n;i++) M*=m[i]; for(int i=0;i<n;i++) { int mm=M/m[i]; int x,y; exgcd(mm,m[i],x,y); ans+=mm*x*a[i]; ...原创 2019-08-30 17:44:02 · 151 阅读 · 0 评论 -
__int128的读入与输出模板
0.0好像c++14可以用,其他的不知道,,自己的编译器编译不了就很难受,,__int128 x;//读入1://scanf("%lld",&x); ---一开始我也很惊讶为啥能这么读入,,但是好像定义得定义在外面//读入2:inline __int128 read(){ int X=0,w=0; char ch=0; while(!isdigit(ch...原创 2019-08-30 21:49:09 · 1027 阅读 · 0 评论 -
染色法判定二分图/匈牙利算法 ----模板
1.染色法判定二分图模板题: Acwing 860.染色法判定二分图#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int N = 2e5+10;int h[N],e[N],ne[N],idx,color[N];void init(){ ...原创 2019-08-31 22:22:24 · 187 阅读 · 0 评论 -
二次剩余模板
。。历时两周终于把它看懂了,太不容易了qaq(当然,是断断续续看的)这是自己认为讲的非常详细的两篇博客了here1 and here2自用模板:ll q_pow(ll a,ll b,ll p){ ll ans=1; while(b) { if(b&1) ans=ans*a%p; a=a*a%p; b>>=1; } return ans;}...原创 2019-09-13 12:25:48 · 191 阅读 · 0 评论 -
马拉车算法模板
这个算法,,,好像比想象中简单一点?模板:int p[N*2];int Manacher(string s){ string t("@#"); for(int i=0;i<s.size();i++) t+=s[i],t+="#"; int ans=0,mx=0,id=0; memset(p,0,sizeof p); for(int i=1;i<t.size();i...原创 2019-09-19 20:07:56 · 192 阅读 · 0 评论 -
trie树模板
模板题:Acwing 835. Trie字符串统计#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int N =1e5+10;int son[N][27],idx;int sum[N];void add(string s){ int...原创 2019-09-07 09:05:55 · 134 阅读 · 0 评论 -
Hdu 2222 Keywords Search (ac自动机模板题)
传送门疯狂整理模板ing#include<iostream>#include<cstring>#include<cstdio>#include<queue>using namespace std;const int N =1e6+10;int trie[N][27],idx;int sum[N];int fail[N]; voi...原创 2019-09-20 17:13:55 · 132 阅读 · 0 评论 -
字符串hash模板
思想:把字符串转换为P进制数。用ull存储,溢出相当于取模作用:O(1)查询两个子串是否相等。一般P为131或13331#include<iostream>#include<cstring>#include<cstdio>using namespace std;typedef unsigned long long ull;const int N ...原创 2019-09-30 09:39:24 · 149 阅读 · 0 评论 -
kmp模板
nex含义:字符串前缀与后缀相等的最大长度#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int N = 1e4+10 , M = 1e5+10;char p[N],s[M];int nex[N];int n,m;void get_next...原创 2019-09-30 10:55:05 · 117 阅读 · 0 评论 -
最长公共上升子序列问题
最长上升子序列和最长公共子序列的结合,这里给出O(n2)做法dp[i][j]表示以b[j]结尾的,a数组中的前i个元素与b数组中的前j个元素可以构成的最长公共子序列的长度。转移方程:分两种情况讨论:1.a[i]不包含在子序列中(a[i] != b[j] 或者相等但是不选择a[i])dp[i][j] = dp[i-1][j]2.a[i]包含在子序列中dp[i][j] = max( dp...原创 2019-10-03 16:39:17 · 386 阅读 · 0 评论 -
数论知识及模板整理
目录一、质数的判定1. 试除法判定质数2. 质因数的分解3. 质数筛选法(埃氏筛法+线性筛)4. 米勒罗宾素数检测法(快速判断大质数)二、约数相关(1)试除法求约数(2)求约数个数或约数之和(3)求最大公因数 / 最小公倍数三、欧几里得算法(1)扩展欧几里得算法(2)线性同余方程四、快速幂(1)快速幂算法(2)大数快速幂(降幂公式)(3)快速幂求逆元(费马小定理)五、欧拉函数六、组合数学七、高斯消元八、容斥原理九、中国剩余定理/扩展中国剩余定理十、其他1. 威尔原创 2019-08-03 16:00:01 · 1205 阅读 · 1 评论 -
最短路 模板题(dijkstra)
给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。Input输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行是两个数 s,t;起点s,终点。n和m为0时输入结束。(1<n<=1000, 0<m<...原创 2019-03-23 22:03:59 · 552 阅读 · 0 评论 -
迷宫问题(bfs+记录路径) 两种模板
定义一个二维数组:int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。Input一个5 × 5的二维数组,表示一个迷宫。数据保...原创 2019-03-23 20:33:49 · 494 阅读 · 0 评论 -
HDU-3038-How Many Answers Are Wrong (带权并查集模板题)
How Many Answers Are WrongTT and FF are … friends. Uh… very very good friends -________-bFF is a bad boy, he is always wooing TT to play the following game with him. This is a very humdrum game. To ...原创 2019-03-20 19:46:59 · 230 阅读 · 0 评论 -
归并排序(模板)
自用模板0.0归并排序基本要点:先递归,后排序,注意边界问题#include<iostream>using namespace std;#define N 100005int a[N];int tem[N];void merge_sort(int l,int r){ if(l>=r) return; int mid=(l+r)/2;...原创 2019-06-07 01:24:09 · 167 阅读 · 0 评论 -
整数二分查找模板
整数二分比实数二分麻烦很多,因为有边界问题,处理不好容易发生死循环。共有两个版本的二分方式版本1:将区间 [l , r]划分为区间[l, mid]和[mid+1, r],更新操作为r=mid或者l=mid+1,此时mid=l+r>>1。代码如下:while(l<r){ mid=l+r>>1; if(check(mid)) ...原创 2019-06-08 00:39:26 · 791 阅读 · 4 评论 -
高精度运算模板(大数加减乘除模板)
1.高精度加法模板计算a+b, a与b长度均<=1e6#include<iostream>#include<vector>using namespace std;vector<int> add(vector<int> &A,vector<int> &B){ int t=0; vect...原创 2019-06-08 01:50:05 · 408 阅读 · 1 评论 -
斐波那契矩阵快速幂模板
自用模板0.0typedef long long ll;#define mod 1000000007struct mat{ ll a[2][2];}ans;mat multi(mat m,mat n){ mat temp; for(int i=0;i<2;i++) for(int j=0;j<2;j++) { temp.a[i][j]=0; f...原创 2019-07-01 15:40:57 · 245 阅读 · 0 评论 -
最长上升/下降子序列(模板)
自用模板0.01.最长上升子序列: vector<int> q; for(int i=0;i<n;i++) { int x=q.size(); if(!x||a[i]>q[x-1]) { q.push_back(a[i]);continue; } int l=0,r=x,mid; while(l<r) { mid=(l+...原创 2019-07-09 17:56:47 · 678 阅读 · 0 评论 -
线段树模板(区间最值查询)
int a[N];struct node{ int l,r,maxx,minx;}tr[N<<2];void pushup(int x){ tr[x].minx=min(tr[x<<1].minx,tr[x<<1|1].minx); tr[x].maxx=max(tr[x<<1].maxx,tr[x<<1|1...原创 2019-06-30 23:16:20 · 299 阅读 · 0 评论 -
分解质因数模板
将一个数分解质因数,从小到大输出它的每一个质因数和其指数。#include<iostream>using namespace std;int main(){ int n; cin>>n; while(n--) { int x; cin>>x; for(int i...原创 2019-06-30 23:21:59 · 561 阅读 · 0 评论 -
质数筛选法(埃氏筛法+线性筛)
1.埃氏筛法基本原理:从小到大将每个质数的倍数筛去若某个数没有被它前面的数筛掉,那么它一定是质数。原因:它不是前面的2~p-1中任何一个数的倍数,那么它是质数时间复杂度:n*log(log(n)),接近线性const int N = 1e6+5;bool isprime[N];int prime[N];int cnt;void init(int n){ isprime[...原创 2019-06-30 23:36:12 · 967 阅读 · 0 评论 -
扩展欧几里得模板
1.求ax+by=gcd(a,b)的任意一组解:因为gcd(a,b)=gcd(b,a%b)为计算方便 , 递归的时候交换x,y位置,那么原式就变为by+(a%b)x=gcd(a,b)=>by + ( a - a / b (下取整) * b) * x = gcd(a,b)=>ax + b(y - a / b * x) = gcd(a,b)#include<iostrea...原创 2019-07-24 18:43:19 · 125 阅读 · 0 评论 -
拓扑排序模板
自用模板0.0#include<iostream>#include<cstring>#include<algorithm>#include<queue>using namespace std;const int N = 1e5+10;int e[N],h[N],ne[N],idx;int d[N],q[N];int n,m;voi...原创 2019-07-29 19:22:37 · 116 阅读 · 1 评论 -
最短路模板整理(Dijkstra+Bellman-ford+spfa+Floyd)
最短路问题总览一、单源最短路1.所有边权都是正数(1)朴素dijkstra算法 (时间复杂度:O(n^2))(2)堆优化版dijkstra算法(时间复杂度:O(mlogn))2.存在负权边(1)Bellman-ford算法(时间复杂度:O(nm))(2)SPFA(时间复杂度:一般O(m),最坏O(nm) )二、多源最短路----- Floyd算法(O(n^3))注:上图来...原创 2019-07-30 00:16:23 · 339 阅读 · 1 评论 -
求树的直径(最长路)模板
自用模板0.0#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define inf 0x3f3f3f3fconst int N =1e5+10;int e[N],h[N],ne[N],w[N],idx;int vis[N];int n,m,ans,v...原创 2019-08-03 08:31:00 · 225 阅读 · 0 评论 -
多重背包单调队列优化
qwq感觉看懂了但不知道怎么表达,先用着再说吧,,,看这位大佬的博客看懂的多重背包单调队列优化模板:#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define fi first#define se secondconst int N = 100...原创 2019-10-05 18:29:18 · 221 阅读 · 1 评论