算法|竞赛题
主要说明各种算法的具体实现思路,通用模板,拓展题目。
Mrzhuang007
这个作者很懒,什么都没留下…
展开
-
30张图带你彻底理解红黑树
转载一篇文章,有时间可以看看写在前面当在10亿数据中只需要进行10几次比较就能查找到目标时,不禁感叹编程之魅力!人类之伟大呀! —— 学红黑树有感。终于,在学习了几天的红黑树相关的知识后,我想把我所学所想和所感分享给大家。红黑树是一种比较难的数据结构,要完全搞懂非常耗时耗力,红黑树怎么自平衡?什么时候需要左旋或右旋?插入和删除破坏了树的平衡后怎么处理?等等一连串的问题在学习前困扰着我。如果你...转载 2020-03-17 17:36:46 · 227 阅读 · 0 评论 -
ST表
预处理时间O(nlogn),查询时间O(1)原理可参考https://blog.csdn.net/Hanks_o/article/details/77547380#include<iostream>#include<cmath>#include<cstdio>using namespace std;int a[100010];//原始输入数组...原创 2019-10-15 19:24:43 · 146 阅读 · 0 评论 -
三分法
其实就是二分法的拓展,一般为求一个(一边递增,一边递减的区间)的最值。也可以用二分+导数做#include<iostream>#include<cstdio>#include<cmath>using namespace std;int n;double l,r,ex=1e-7;double xi[15];//秦九韶多项式计算double g...原创 2019-10-15 18:29:13 · 614 阅读 · 0 评论 -
树状数组
给一个链接,博主讲得比较清晰https://www.cnblogs.com/xenny/p/9739600.html下面是几种常见情况的模板单点更新,区间查询#include <iostream>using namespace std;int a[500010],c[500010]; //对应原数组和树状数组int n,m;int lowbit(int x){...原创 2019-10-15 17:44:15 · 136 阅读 · 0 评论 -
P4549 【模板】裴蜀定理
裴蜀(贝祖)定理,参考另一篇https://blog.csdn.net/qq_17190121/article/details/102489506本篇为该定理的扩展ax+by=gcd(a,b)*k,gcd(a,b)作为已知,于是两项就合并为一项了。这样a1x1+a2x2+a3x3+....的最小非负整数解就变成了gcd(x1,x2,x3,...)#include<iostr...原创 2019-10-12 19:29:31 · 170 阅读 · 0 评论 -
字符串哈希
用STL的set集合做的#include<iostream>#include<set>using namespace std;set<string> haxi;int main(){ string s; int n; cin>>n; int ans=n; for(int i=0;i<n;...原创 2019-10-12 18:59:53 · 125 阅读 · 0 评论 -
堆
利用STL中的优先队列实现,可参考https://blog.csdn.net/c20182030/article/details/70757660#include<iostream>#include<queue>using namespace std;priority_queue<int,vector<int>,greater<int&...原创 2019-10-12 18:45:01 · 118 阅读 · 1 评论 -
线性筛素数
#include<iostream>#include<cstdio>using namespace std;int num[10000010]={1,1};int main(){ for(int i=2;i<=5000000;i++){ if(!num[i]) for(int j=2;j*i<=10000000...原创 2019-10-12 18:37:00 · 147 阅读 · 0 评论 -
二部图最大匹配(匈牙利算法)
//本题编写的匈牙利算法用于解决下面地址的编程题//https://www.luogu.org/problemnew/show/P1894#include<iostream>#include<cstring>using namespace std;//邻接矩阵存图int map[500][500];//是否已有匹配int match[500];int c...原创 2019-10-12 18:05:01 · 223 阅读 · 0 评论 -
背包问题
//01背包void zero(int v,int w){ for(int j=V;j>=v;j--) { dp[j]=max(dp[j],dp[j-v]+w); } return ;}//完全背包void complete(int v,int w){ for(int j=v;j<=V;j++) { dp[j]=max(dp[j],dp[j-v]+w)...原创 2019-10-12 18:01:33 · 92 阅读 · 0 评论 -
最小生成树,并查集
https://www.luogu.org/problem/P3366#include<iostream>#include<algorithm>using namespace std;const int N=5010,M=200010;struct edge{ int x,y,z; bool operator<(const edge ...原创 2019-10-12 17:55:19 · 157 阅读 · 0 评论 -
几种最短路径算法
Dijisktra不能处理负边,时间复杂度O(n^2),堆优化O(nlogE)基本思路:首先它是求单源点到其他边的最短路。方法就是创建一个集合来存放一些点,一开始放源点进去。然后每次取到集合外哪个点的距离最短,将其加入集合。(这个时候要更新,即通过该点再到其他点会不会比现在到其他点的距离短,会就更新)在一开始输入图的信息后,肯定至少有一条边已经是最短边了,如果说能通过其他点再到目标点距离更短...原创 2019-10-12 17:01:25 · 1975 阅读 · 0 评论 -
扩展欧几里得、同余方程、乘法逆元
扩展欧几里得、同余方程、乘法逆元1.欧几里得欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数 gcd(a,b)。基本算法:设 a = qb + r,其中a,b,q,r都是整数,则 gcd(a,b) = gcd(b,r),即 gcd(a,b) = gcd(b,a%b)。证明:a = qb + r如果 r = 0,那么 a 是 b 的倍数,此时显然 b 是 a 和 b 的最大公...原创 2019-10-10 19:51:44 · 259 阅读 · 0 评论 -
KMP字符串匹配(C++)
字符串匹配:求一个字符串是不是另一个字符串的子串(下文称为主串和模式串)KMP能够达到O(n+m)的时间复杂度,而暴力匹配(朴素匹配)则需要花费O(nm)的时间。例题:判断aaab是不是aabaaaab的子串暴力匹配:按顺序一个一个匹配,失败了重新开始(主串向前移动一位,模式串回到第一位)重复这个动作,直到最后匹配成功==============...原创 2019-10-08 20:37:19 · 427 阅读 · 0 评论 -
字典树(c++描述)
字典树一般用于字符串的匹配,当数量多的时候效率还是挺明显的。这里以一道洛谷的题为例子,https://www.luogu.org/problem/P2580题目的大致意思时,先给你n个字符串,然后再给你m个字符串,求这m个字符串是否在n个字符串中出现过或是否重复出现了。若采用朴素一对一的比较方式,那时间复杂度就是O(nxmx‘字符串长度’),所以还是算了。解决的方法便是利用字...原创 2019-08-25 17:10:41 · 234 阅读 · 0 评论 -
归并排序、逆序对、冒泡排序交换次数(c++描述)
这里并不打算详细讲解原理,拿某位大佬做的动图看一下,https://www.cnblogs.com/fivestudy/p/10064969.html简单讲,就是不断把两个排好序的数组再合为一个有序的数组,这个应该不难理解,貌似以前C语言学到数组的时候就讲过了。逆序对概念:设 A 为一个有 n 个数字的有序集(n>1),其中所有数字各不相同。如果存在正整数 i, j...原创 2019-08-18 18:30:20 · 1377 阅读 · 0 评论 -
快速幂,矩阵快速幂(c++ 描述)
今天想介绍一个在中低难度算法竞赛中经常碰到的算法---快速幂,于此相匹配的还有一个叫矩阵快速幂的东西。不过这篇文章只介绍快速幂,之后有时间再更新矩阵快速幂的知识。快速幂,顾名思义,就是快速求解某一个数的指数次方结果为多少。普通求解如让你求2^5次方,你可以很快计算出结果为2*2*2*2*2=32。这种方式在计算机中可以使用pow函数解决,即pow(2,5)=32。引入头文件cma...原创 2019-10-12 18:03:20 · 1133 阅读 · 0 评论 -
二分法查找(c++描述)
概念二分查找,又称折半查找。顾名思义,就是在一堆有序排列的元素中查找某一指定数值。返回数值对应的下标或-1(查不到)。场景模拟看其他文章都是千篇一律的猜数字,我们换一换风格,来猜一猜价格吧。这不是一样的吗?比如说现在让你猜一件商品的价格,已知商品的价格在1-1000元之间,且为整数,现在让你尽快猜中商品的价格,你要怎么做呢?(你每猜一个价格,都能得知这个价格与正确价格相比是相同的,...原创 2019-07-24 21:53:17 · 422 阅读 · 0 评论