![](https://img-blog.csdnimg.cn/20190918140145169.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
😜ACM各类模板
😜ACM各类模板
风骨散人Chiam
我叫风骨散人Chiam,名字的意思是向往可以不低头的自由生活,可现实却不是这样,希望同样被生活绑架的你,可以通过自己的努力改变现状。目前在中国科学院攻读研究生,研究方向是网络安全和控制访问,热爱编程,热爱技术,喜欢分享,知识无界,希望我的分享可以帮到你!
如果有什么想看的,可以私信我,如果在能力范围内,我会发布相应的博文!
感谢大家的阅读!你的点赞、收藏、关注是对我最大的鼓励!
在CSDN没什么收益,博主已经没有动力继续更新技术文章了,已经准备跑路了,大家如果想了解我的更改情况就去我的主页看看。
展开
-
『数学』你确定你学会了勾股弦定理!真的吗?看完这个篇文章再回答我!
勾股定理:勾股定理,又称“毕达哥拉斯定理”,是初等几何中的一个基本定理。这个定理有十分悠久的历史,两千多年来,人们对勾股定理的证明颇感兴趣,因为这个定理太贴近人们的生活实际,以至于古往今来,上至帝王总统,下至平民百姓,都愿意探讨和研究它的证明。它是几何学中一颗闪亮的明珠。简单来说就是,直角三角形两条直角边a、b的平方和等于斜边c的平方(a²+b²=c²)勾股数:勾股数,又名毕氏三元数 。勾股数就是可以构成一个直角三角形三边的一组正整数。 勾股数规律:首先是奇数组口诀:平方后拆成连续两个数。其.原创 2020-05-29 01:07:50 · 3809 阅读 · 5 评论 -
『ACM-算法-Hash算法』信息竞赛进阶指南--字符串哈希
字符串hash主要应用在:寻找长度为n的主串S中的匹配串T(长度为m)出现的位置或次数的问题属于字符串匹配问题。类似的还有KMP,我也有讲解。原理:将字符串中的每一个字母都看做是一个数字(例:从a-z,视为1-26);选取两个合适的互质常数 b和h,其中h要尽可能的大一点,为了降低冲突的概率。定义哈希函数,H(C)=[c1∗b(m−1)+c2∗b(m−2)+...+cm∗b0]mod hH(C)=[ c_1*b^{(m-1)} + c_2*b^{(m-2)} + . . . + c_m*b原创 2020-04-23 08:22:20 · 3236 阅读 · 0 评论 -
『ACM-算法-ST算法』信息竞赛进阶指南--区间最值问题的ST算法
借助倍增和动态规划可以实现O(1)的时间复杂度的查询**预处理:**①区间DP 转移方程 f[i][j] = min(MAX同理)(f[i][j - 1],f[i + ][j - 1]) f[i][j]表示从i位置开始的后2^j个数中的最大值用f[i][j]表示从j到j+2^i-1的最小值(长度显然为2^i)。任意一段的最小值显然等于min(前半段最小值,后半段最小值)。那么f[i][j]如何用其他状态来继承呢?j到j+2^i-1的长度为2^i,那么一半的长度就等于2^(i-1)。原创 2020-04-23 08:12:31 · 3019 阅读 · 0 评论 -
任意进制转化 函数 模板(一)
虽然说是任意进制,但是等24个字母用完了,就尴尬,如果题目给出其他字符表示的话加个判断即可。36进制有点变态了,应该够用。 #include<iostream>#include<algorithm>using namespace std;string solve(int a,int b);bool flag;int main(){ int x...原创 2019-05-20 23:55:45 · 2655 阅读 · 0 评论 -
信息竞赛进阶指南--归并排序求逆序对
// 归并排序求逆序对void merge(int l, int mid, int r) { // 合并a[l~mid]与a[mid+1~r] // a是待排序数组, b是临时数组, cnt是逆序对个数 int i = l, j = mid + 1; for (int k = l; k <= r; k++) if (j > r || i <= mid &&a...原创 2020-04-14 15:08:31 · 2747 阅读 · 0 评论 -
『ACM-算法-离散化』信息竞赛进阶指南--离散化
#### 为什么要离散化?当以权值为下标的时候,有时候值太大,存不下。 所以把要离散化的每一个数组里面的数映射到另一个值小一点的数组里面去。$打个比方,某个题目告诉你有10^4个数,每个数大小不超过2^{40},要你对这些数进行操作, 你开long long 存不下,开int 又会溢出,那怎么办呢?离散化!$我们来看一下定义:离散化,把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。原创 2020-04-14 15:05:17 · 3005 阅读 · 0 评论 -
『ACM-算法-枚举法』信息竞赛进阶指南--枚举方法
// 递归实现指数型枚举vector<int> chosen;void calc(int x) { if (x == n + 1) { for (int i = 0; i < chosen.size(); i++) printf("%d ", chosen[i]); puts(""); return; } calc(x + 1); chosen.pu...原创 2020-04-14 14:59:53 · 2883 阅读 · 0 评论 -
『ACM-算法-二分法』信息竞赛进阶指南--二分法
// 在单调递增序列a中查找>=x的数中最小的一个(即x或x的后继)while (l < r) { int mid = (l + r) / 2; if (a[mid] >= x) r = mid; else l = mid + 1;}// 在单调递增序列a中查找<=x的数中最大的一个(即x或x的前驱)while (l < r) { int mid =...原创 2020-04-14 14:56:06 · 3115 阅读 · 0 评论 -
『ACM-算法-二分法』在单调递增序列a中查找小于等于x的数中最大的一个(即x或x的前驱)
在单调递增序列a中查找<=x的数中最大的一个(即x或x的前驱)while (l < r) { int mid = (l + r + 1) / 2; if (a[mid] <= x) l = mid; else r = mid - 1;}原创 2020-06-01 18:28:16 · 3296 阅读 · 0 评论 -
『ACM-算法-二分法』算法竞赛进阶指南--在单调递增序列a中查找大于等于X的数中最小的一个,即X或X的后继
while (l < r) { int mid = (l + r) / 2; if (a[mid] >= x) r = mid; else l = mid + 1;}原创 2020-04-14 10:58:03 · 2815 阅读 · 0 评论 -
『ACM-算法-lowbit』算法竞赛进阶指南--lowbit运算,找到二进制下所有是1的位
// lowbit运算,找到二进制下所有是1的位int H[37];// 预处理for (int i = 0; i < 36; i++) H[(1ll << i) % 37] = i;// 对多次询问进行求解while (cin >> n) { while (n > 0) { cout << H[(n & -n) % 37] ...原创 2020-04-14 10:47:47 · 2880 阅读 · 0 评论 -
『ACM-算法-图论』算法竞赛进阶指南--hamilton路径(模板)
> 哈密顿图(哈密尔顿图)(英语:Hamiltonian graph,或Traceable> graph)是一个无向图,由天文学家哈密顿提出,由指定的起点前往指定的终点,途中经过所有其他节点且只经过一次。在图论中是指含有哈密顿回路的图,闭合的哈密顿路径称作哈密顿回路(Hamiltonian> cycle),含有图中所有顶点的路径称作哈密顿路径(Hamiltonian path)。 >天文学家哈密顿(William Rowan Hamilton) 提出,在一个有多个城市的地图网络中,寻找一条从给定的原创 2020-04-14 10:47:06 · 3185 阅读 · 0 评论 -
算法竞赛进阶指南--快速幂,求a^b mod p
// 快速幂,求a^b mod pint power(int a, int b, int p) { int ans = 1; for (; b; b >>= 1) { if (b & 1) ans = (long long)ans * a % p; a = (long long)a * a % p; } return ans;}// 64位整数乘法的O(...原创 2020-04-14 10:46:32 · 3150 阅读 · 0 评论 -
信息竞赛进阶指南--二叉堆(模板)
// 二叉堆int heap[SIZE], n;void up(int p) { while (p > 1) { if (heap[p] > heap[p/2]) { swap(heap[p], heap[p/2]); p/=2; } else break; } }void down(int p) { int s = p*2; while (s ...原创 2020-04-23 08:25:17 · 2800 阅读 · 0 评论 -
『ACM--数据结构--字典树』信息竞赛进阶指南--Tire树
Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。原创 2020-04-23 08:24:33 · 2841 阅读 · 0 评论 -
『ACM--算法--KMP』信息竞赛进阶指南--KMP算法(模板)
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n)。原创 2020-04-23 08:23:30 · 2955 阅读 · 0 评论 -
信息竞赛进阶指南--单调队列模板
// 单调队列int l = 1, r = 1;q[1] = 0; // save choice j=0for(int i = 1; i <= n; i++){ while (l <= r && q[l] < i - m) l++; ans = max(ans, sum[i] - sum[q[l]]); while (l <= r &&...原创 2020-04-23 08:21:12 · 2734 阅读 · 0 评论 -
信息竞赛进阶指南--递归法求中缀表达式的值,O(n^2)(模板)
// 递归法求中缀表达式的值,O(n^2)int calc(int l, int r) { // 寻找未被任何括号包含的最后一个加减号 for (int i = r, j = 0; i >= l; i--) { if (s[i] == '(') j++; if (s[i] == ')') j--; if (j == 0 && s[i] == '+') ret...原创 2020-04-23 08:20:09 · 2804 阅读 · 0 评论 -
信息竞赛进阶指南--单调栈(模板)
a[n + 1] = p = 0;for (int i = 1; i <= n + 1; i++) { if (a[i] > s[p]) { s[++p] = a[i], w[p] = 1; } else { int width=0; while (s[p] > a[i]) { width += w[p]; ans = max(ans, (long ...原创 2020-04-23 08:15:04 · 2771 阅读 · 0 评论 -
ACM算法--枚举方法(指数枚举,组合枚举)模板
// 递归实现指数型枚举vector<int> chosen;void calc(int x) { if (x == n + 1) { for (int i = 0; i < chosen.size(); i++) printf("%d ", chosen[i]); puts(""); return; } calc(x + 1); chosen.pu...原创 2020-04-14 15:02:15 · 2775 阅读 · 0 评论 -
ACM算法--二分法--模板
// 在单调递增序列a中查找>=x的数中最小的一个(即x或x的后继)while (l < r) { int mid = (l + r) / 2; if (a[mid] >= x) r = mid; else l = mid + 1;}// 在单调递增序列a中查找<=x的数中最大的一个(即x或x的前驱)while (l < r) { int mid =...原创 2020-04-14 14:56:54 · 2962 阅读 · 0 评论 -
『ACM』ACM模板合集
ACM模板整理:数学:数论–康托展开与逆康托展开模板 数论–组合数(卢卡斯+扩展卢卡斯)模板 数论–Miller_Rabin判断素数数论–中国剩余定理模板 数论–逆元(拓展欧几里得)模板 数论–逆元(费马小定理)模板数学–数论–因子和线性筛 (模板)数学–数论–随机算法–Pollard Rho 大数分解算法(纯模板带输出)数学–数论–快速幂–最大公约数–位运算模板线性筛求积性...原创 2020-03-09 15:03:55 · 7551 阅读 · 95 评论 -
数学--数论--广义欧拉降幂(模板)
未使用欧拉筛:适用于较少次数计算的欧拉降幂。#include <bits/stdc++.h>#define ll long longusing namespace std;ll a,m,b;inline ll read(ll m){ register ll x=0,f=0;char ch=getchar(); while(!isdigit(ch)) ch=...原创 2020-03-02 00:23:35 · 2767 阅读 · 0 评论 -
数学--数论--因子和线性筛 (模板)
#include <bits/stdc++.h>using namespace std;typedef long long ll;#define N 500022int prime[N],cnt;bool vis[N];int num[N],e[N];void init(){ for(int i=2;i<=N;++i) { if(!...原创 2020-02-08 03:06:26 · 2698 阅读 · 0 评论 -
数学--数论--随机算法--Pollard Rho 大数分解算法(纯模板带输出)
#include <bits/stdc++.h>using namespace std;typedef long long ll;ll pr;ll pmod(ll a, ll b, ll p) { return (a * b - (ll)((long double)a / p * b) * p + p) % p; } //普通的快速乘会Tll gmod(ll a, ll b,...原创 2020-02-08 01:57:30 · 2780 阅读 · 2 评论 -
C++ 快读快写
inline int read(){ int s=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); } while(ch>='0'&&ch<='9'){ s=s*10+ch-'0'; ch=getchar(); ...原创 2020-02-08 01:14:09 · 2806 阅读 · 0 评论 -
编译优化
1 #pragma comment(linker, "/stack:200000000")2 #pragma GCC optimize("Ofast,no-stack-protector")3 #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")4 #pragma GCC optimize(...原创 2020-02-08 01:03:11 · 2698 阅读 · 0 评论 -
数学--数论--快速幂--最大公约数--位运算模板
inline ll gcd(ll a,ll b){//听说二进制算法特快 if(!a)return b; if(!b)return a; int t=ctz(a|b); a>>=ctz(a); do{ b>>=ctz(b); if(a>b){ll t=b;b=a,a=t;} b-=...原创 2020-01-26 01:04:04 · 2775 阅读 · 0 评论 -
线性筛求积性函数的模板
void sieve(){ tot = 1; memset(vis, 0, sizeof(vis)); low[1] = 1; G[1] = 函数G(n) n=1时的定义 for (int i = 2; i <= mxn; i++) { if (!vis[i]) { pri[tot++]...原创 2020-01-21 01:25:02 · 2698 阅读 · 0 评论 -
数学--图论--莫比乌斯线性筛模板
int prime[MAXN],prime_tot;bool isprime[MAXN];int mu[MAXN];void pre_calc(int limt){ mu[1]=1; for(int i=2;i<=limt;i++) { if(!isprime[i]){ prime[prime_tot]=i; ...原创 2020-01-16 15:49:01 · 2655 阅读 · 0 评论 -
数学--数论---欧拉筛 模板
typedef long long ll;bool ok[maxn];int prime[maxn],phi[maxn],cnt;void sieve(){ phi[1]=1; for(ll i=2;i<maxn;++i) { if(!ok[i]) { prime[cnt++]=i; phi[i]=i-1; } for(int j=0...原创 2020-01-16 09:09:19 · 2659 阅读 · 0 评论 -
数学--数论--素数
定义判断:bool isPrime (int n){ for(int i=2;i*i<=n;i++) { if(n%i==0) return false; } else return false;}埃氏筛法int primes[N],cnt;bool bprime[N];void getPrime(int n){ memset(bprime,false,s...原创 2019-12-17 11:57:25 · 2683 阅读 · 0 评论 -
图论--拓扑排序--模板
//字典序号最小#include <cstdio>#include <cstring>#define MAXN 517int G[MAXN][MAXN]; //路径int in_degree[MAXN]; //入度int ans[MAXN];int n, m, x, y;int i, j;bool toposort(){ for (i = ...原创 2019-12-10 10:33:55 · 2565 阅读 · 0 评论 -
数论--费马小定理求逆元
int Fermat_inverse(int a,int mod){ int res = 1; for(int i = 1;i < mod - 1;++i) res *= a; return res; } //如果p为大素数,我们可以用快速幂求解,时间复杂度为:long long fast_pow_mod(long long a,long long b,l...原创 2019-12-09 20:00:37 · 2689 阅读 · 0 评论 -
数论--模板整理
数论–康托展开与逆康托展开模板数学–数论–组合数(卢卡斯+扩展卢卡斯)模板数学–数论–Miller_Rabin判断素数数论–中国剩余定理模板数学–数论–逆元(拓展欧几里得)模板...原创 2019-12-09 19:59:29 · 2540 阅读 · 0 评论 -
数论--康托展开与逆康托展开模板
#include<bits/stdc++.h>using namespace std;const int MAX = 13;int Fac[MAX],N;//求出阶乘void init(){ Fac[0] = 1; for(int i=1;i<=N;++i){ Fac[i] = Fac[i-1]*i; }}//康托展开in...原创 2019-12-09 19:55:58 · 2865 阅读 · 0 评论 -
数学--数论--组合数(卢卡斯+扩展卢卡斯)模板
#include<cstdio>const int N = 2000 + 5;const int MOD = (int)1e9 + 7;int comb[N][N];//comb[n][m]就是C(n,m)void init(){ for(int i = 0; i < N; i ++){ comb[i][0] = comb[i][i] = 1; ...原创 2019-12-07 14:25:55 · 2688 阅读 · 0 评论 -
数学--数论--Miller_Rabin判断素数
#include<iostream>#include<algorithm>#include<cstring>#include<cstdlib>#include<cmath>#include<ctime>using namespace std;typedef long long ll;const int N = ...原创 2019-12-06 20:25:59 · 2726 阅读 · 0 评论 -
数论--中国剩余定理模板
void exgcd(int a,int b,int &x,int &y){ if(b==0){ x=1; y=0; return;} exgcd(b,a%b,x,y); int tp=x; x=y; y=tp-a/b*y;}int china(){ int ans=0,lcm=1,x,y; for(int i=1;i<...原创 2019-12-06 20:01:35 · 2666 阅读 · 0 评论 -
图论--最长路--基于SPFA的调整模板
#include<iostream>#include<queue>#include<algorithm>#include<set>#include<cmath>#include<vector>#include<map>#include<stack>#include<bitset&g...原创 2019-12-03 22:05:49 · 2681 阅读 · 0 评论