![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法及模板
主要是以模板为主,以及基本算法原理
cheems~
业精于勤,荒于嬉;行成于思,毁于随。
展开
-
线段树模板
线段树模板无lasy标记 hdu1754lazy标记 poj3468注意了,线段树的空间是4倍,MAXN*4无lasy标记 hdu1754#include<iostream>#include<string>#include<stdio.h>#include<algorithm>using namespace std;#define MAXN 200005int n,m,a[MAXN];struct node { int l,r,maxn;原创 2021-07-30 10:41:00 · 130 阅读 · 0 评论 -
树状数组模板
树状树状模板单点修改,区间查询区间修改,单点查询区间修改,区间查询单点修改,区间查询#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;int t[50005],a[50005];int n;void add(int x,int k) { for(; x<=n; x+=x&-x)t[x]+=k;原创 2021-07-29 15:35:22 · 75 阅读 · 0 评论 -
Lucas定理求大组合数取模
Lucas定理求大组合数取模#include<iostream>#include<stdio.h>#define LL long longusing namespace std;LL a,b;int p;LL quick_mod(LL a, LL b) { LL ans = 1; a %= p; while(b) { if(b & 1) { ans = ans * a % p; b--; } b >>= 1; a =原创 2021-07-28 15:22:19 · 133 阅读 · 1 评论 -
欧拉降幂模板
hdu4704https://acm.hdu.edu.cn/showproblem.php?pid=4704#include<iostream>#include<algorithm>#include<math.h>#include<string.h>#define ll long longusing namespace std;ll phi(ll n) {//欧拉函数 ll ans = n; for (ll i = 2; i * i &l原创 2021-07-28 15:17:50 · 196 阅读 · 0 评论 -
三分~~~~
注意第7行即可void solve() { double l = 0, r = 100;//l左边界,r右边界 double eps = 1e-12;//精度 while (r - l > eps) { double mid = (l + r) / 2.0; double mmid = (mid + r) / 2.0; if (f(mid) < f(mmid))//计算最小值用<,若为最大值则> r = mmid; else l = mid;原创 2021-07-26 15:59:31 · 80 阅读 · 0 评论 -
KMP算法
有时候读字符串会T,要用scanfgetnext()是KMP算法的核心#include<iostream>#include<string>#include<string.h>using namespace std;int ans=0;char matching[1000005];char pattern[10005];int next1[10005];int lenp,lenm;void getnext() { //存next1[]核心! int原创 2021-07-22 18:10:45 · 97 阅读 · 0 评论 -
序列自动机
通过预处理的方式,来快速检测一个字符串是不是母串的子序列这里母串赋值和算长度不要变,固定模板判断代码例题原理看这篇序列自动机-处理子串匹配这里母串赋值和算长度不要变,固定模板int nt[100005][26];char a[100005];scanf("%s",a+1);void init() { int len=strlen(a+1); for(int i=len; i>=1; i--) { for(int j=0; j<26; j++) { nt[i-1][j原创 2021-07-22 17:58:03 · 222 阅读 · 0 评论 -
最小(大)表示法
给定一个字符串,把它首尾相连形成字符环,然后从某个点开始的字符串字典序最小,为该字符串的最小表示最小最大的区别就是在第9行的>和<符号最小int mininum(char sec[]) { int n=strlen(sec); int k=0,i=0,j=1; while(k<n&&i<n&&j<n) { if(sec[(i+k)%n]==sec[(j+k)%n]) { k++; } else { sec原创 2021-07-22 17:51:31 · 291 阅读 · 0 评论 -
哈夫曼编码和字典树
哈夫曼,字典树,01字典树哈夫曼HUD2527VJ字典树HUD2072为例HUD1251为例01字典树HUD4825哈夫曼HUD2527http://acm.hdu.edu.cn/showproblem.php?pid=2527#include<iostream>#include<string.h>#include<queue>using namespace std;priority_queue <int,vector <int>,gr原创 2021-07-21 15:32:05 · 291 阅读 · 1 评论 -
LIS,LCS,LCIS
LIS,LCS,LCIS模板LIS(最长上升子序列)LCS(最长公共子序列)LCIS(最长公共上升子序列)LIS(最长上升子序列)#include<iostream>using namespace std;int a[1100],dp[1100],ans,n;int main() { cin>>n; for(int i=1; i<=n; i++) { cin>>a[i]; dp[i]=1;//初始状态 } ans=1; for(int i原创 2021-07-21 15:05:04 · 144 阅读 · 0 评论 -
二分图相关模板
二分图相关模板二分图最大匹配二分图判定(上色)二分图最大匹配#include<iostream>using namespace std;int n,m,k;int map[MAXN][MAXN];//存储二分图的关系int link[MAXN],used[MAXN];//link=-1是未连接,used代表是否用过int dfs(int x) { for(int i=1; i<=m; i++) {//注意此处的m,右部的大小,map[][m] if(map[x][i原创 2021-07-16 19:32:09 · 66 阅读 · 0 评论 -
链式向前星vector存储
用数组模拟会T,今天被坑了- -vector#include<iostream>#include<vector> using namespace std;struct node { int v,w; node(int v,int w):v(v),w(w) { };};vector<node>edge[MAXN];//edge[u][i].v,从u点出发的第i条边为v//edge[u][i].w,u到v的权 void add(int u,int v原创 2021-07-15 16:41:58 · 128 阅读 · 0 评论 -
ST表及RMQ区间最值查询模板
void ST(int n) { for (int i = 1; i <= n; i++) dp[i][0] = A[i];//A[]即需要查询的数组,dp规划行程ST表 for (int j = 1; (1 << j) <= n; j++) { for (int i = 1; i + (1 << j) - 1 <= n; i++) { dp[i][j] = max(dp[i][j - 1],原创 2021-07-15 14:39:30 · 150 阅读 · 0 评论 -
LCA(Least Common Ancestors)
#include<iostream>#include<math.h>#include<string.h>#define MAXN 10005using namespace std;int head[MAXN*2],cnt;struct edge { int to; int next;} e[MAXN*2];//链式向前星的边int N,d[MAXN],f[MAXN][30],n;//N是最远跳2的多少次,d[]是每个点的深度,f[i][j]是i点的2原创 2021-07-15 11:06:12 · 165 阅读 · 0 评论 -
拓扑排序
拓扑排序通常用来判断途中图中有没有环模板#include<iostream>#include<string.h>using namespace std;#define MAXN 105int G[MAXN][MAXN];int in[MAXN];int ans[MAXN];int n, m;void ac() { for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { if(G[原创 2021-05-24 17:56:28 · 87 阅读 · 0 评论 -
最短路之Floyd算法
最短路之Floyd算法关于原理请看:只有五行的Floyd最短路算法需要注意的是:Floyd算法不能解决带有“负权回路”(或者叫“负权环”)的图,因为带有“负权回路”的图没有最短路。例如下面这个图就不存在1号顶点到3号顶点的最短路径。因为1->2->3->1->2->3->…->1->2->3这样路径中,每绕一次1->-2>3这样的环,最短路就会减少1,永远找不到最短路。其实如果一个图中带有“负权回路”那么这个图则没有最短路。#incl原创 2021-04-28 20:18:34 · 356 阅读 · 0 评论 -
最短路之SPFA算法
最短路之SPFA算法存储图的方式适用范围算法思想实现方法存储图的方式链式向前星适用范围给定的图存在负权边,这时类似Dijkstra等算法就不能用了算法思想我们用数组d记录每个结点的最短路径估计值,用邻接表来存储图G。我们采取的方法是动态逼近法:设立一个先进先出的队列用来保存待优化的结点,优化时每次取出队首结点u,并且用u点当前的最短路径估计值对离开u点所指向的结点v进行松弛操作,如果v点的最短路径估计值有所调整,且v点不在当前的队列中,就将v点放入队尾。这样不断从队列中取出结点来进行松弛操作,直原创 2021-04-28 19:49:52 · 254 阅读 · 0 评论 -
动态规划解最长公共子序列(LCS)原理及模板
最长公共子序列 LCS 最长公共子序列1.LCS的概念2.LCS的规律最长公共子序列的模板1.动态规划求解LCS模板2. LCS字符串输出(还原)最长公共子序列1.LCS的概念(1)递增 (2)可以连续可以不连续 (3)公共:在S1内,又在S2内 (4)最长:5(acdEH)>4(acdE)…2.LCS的规律下列图片来自动态规划解最长公共子序列(LCS)(附详细填表过程)看了下面6张图,就可以得出上图的结论,从而递推出if(s1[i-1]==s2[j-1]) dp[i][j]原创 2021-04-28 18:19:21 · 909 阅读 · 0 评论 -
最短路之Dijkstra算法
关于原理请看:【啊哈!算法】系列7:Dijkstra最短路算法Dijkstra算法图文详解本文对代码进行解释单源最短路径Dijkstra#include<iostream>#include<stdio.h>#include<algorithm>#include<string.h>#define INF 0x3f3f3fusing namespace std;int map[1005][1005];int dis[1005],book[100原创 2021-04-26 20:53:40 · 442 阅读 · 1 评论 -
素数筛模板
素数筛什么是素数模板什么是素数素数就是除了1和本身,不能被其他数整除的数模板#include<bits/stdc++.h>using namespace std;#define MAXN 1000000int c=0;//记录素数数组内素数个数int prime[MAXN];//保存素数的数组int vis[MAXN];//判断某个数是否已经被访问int main() { void euler(int n) { for(int i = 2; i <= n; ++i原创 2021-04-22 19:35:12 · 148 阅读 · 0 评论 -
高精度大数(超long long)取余原理及模板
大数取余大数取余的原理: 从字符串的首位开始,对其取余,并将余数存起来与后一位连接(非相加,继续取余。其实就是模拟我们手算时的过程例如 562对3取余取首位 5 % 3=2取第二位 并加上之前的余数 (2* 10+6)%3=2取第三位 同样加上之前的余数 (2*10+2)%3=4得到 562%3=4long long ans=0;for (int i = 0; i < num.size(); i++) { ans=(ans*10+num[i]-'0')%mod;//mod是需要取原创 2021-04-19 21:29:57 · 4464 阅读 · 0 评论 -
欧拉函数及模板
欧拉函数什么是欧拉函数怎么计算欧拉函数欧拉函数三种常用模板一个数求欧拉函数多个数求欧拉函数素数什么是欧拉函数欧拉函数是小于x的整数中与x互质的数的个数,一般用φ(x)表示。特殊的,φ(1)=1。例如,φ(12)=4 {1,5,7,11}怎么计算欧拉函数φ(x)=X*1p1\frac{1}{p1}p11 * 1p2\frac{1}{p2}p21 * … * 1pi\frac{1}{pi}pi1其中p1,p2,p3…pi为x的所有质因数(指能整除给定正整数的质数),x是正整数。比如x=原创 2021-04-19 20:56:02 · 2419 阅读 · 6 评论