没有合适的资源?快使用搜索试试~ 我知道了~
常用C++算法,OIer必备
需积分: 0 4 下载量 102 浏览量
2023-06-23
15:58:40
上传
评论
收藏 13.39MB DOCX 举报
温馨提示
试读
171页
OIer必备 源自AcWing
资源推荐
资源详情
资源评论
1
算法模板
目录
算法模板...............................................................................................................................................................1
一. 基础算法....................................................................................................................................2
1. 排序.............................................................................................................................................2
2. 二分.............................................................................................................................................5
3. 高精度 ........................................................................................................................................6
4. 计算技巧 .................................................................................................................................10
5. 双指针算法.............................................................................................................................13
6. 位运算......................................................................................................................................14
7. 离散化......................................................................................................................................14
8. 区间和并 .................................................................................................................................16
二. 数据结构 .................................................................................................................................18
1. 链表 ..........................................................................................................................................18
2. 栈...............................................................................................................................................20
3. 队列 ..........................................................................................................................................23
4. KMP...........................................................................................................................................25
5. Trie 树.......................................................................................................................................26
6. 并查集......................................................................................................................................27
7. 堆...............................................................................................................................................28
8. 哈希表......................................................................................................................................32
9. STL 使用技巧 .........................................................................................................................35
10. 树状数组.............................................................................................................................38
11. 线段树 .................................................................................................................................43
三. 搜索与图论.............................................................................................................................48
1. DFS............................................................................................................................................48
2. BFS ............................................................................................................................................49
3. 图的存储方式 ........................................................................................................................52
4. 深度优先遍历 ........................................................................................................................54
5. 广度优先遍历 ........................................................................................................................57
6. 拓扑排序 .................................................................................................................................58
7. 欧拉回路和欧拉路径 ..........................................................................................................60
8. 最短路问题.............................................................................................................................66
9. 最小生成树.............................................................................................................................73
10. 树的基础算法....................................................................................................................77
11. 最近公共祖先问题 ..........................................................................................................80
12. 二分图 .................................................................................................................................92
13. 差分约束系统....................................................................................................................94
2
四. 数学知识 .................................................................................................................................97
1. 数论 ..........................................................................................................................................97
2. 欧拉函数...............................................................................................................................103
3. 快速幂 ...................................................................................................................................106
4. 矩阵........................................................................................................................................107
5. 扩展欧几里得算法.............................................................................................................111
6. 中国剩余定理......................................................................................................................113
7. 高斯消元...............................................................................................................................115
8. 求组合数...............................................................................................................................118
9. 容斥原理...............................................................................................................................122
10. 博弈论...............................................................................................................................124
五. 动态规划...............................................................................................................................127
1. 背包问题...............................................................................................................................128
2. 线性 DP .................................................................................................................................143
3. 区间 DP .................................................................................................................................150
4. 计数 DP .................................................................................................................................151
5. 数位统计 DP........................................................................................................................152
6. 状压 DP .................................................................................................................................154
7. 树形 DP .................................................................................................................................157
8. 记忆化搜索 ..........................................................................................................................159
六. 贪心........................................................................................................................................161
1. 区间问题...............................................................................................................................161
2. Huffman 树 ..........................................................................................................................166
3. 排序不等式 ..........................................................................................................................167
4. 绝对值不等式......................................................................................................................167
5. 推公式 ...................................................................................................................................168
七. 时空复杂度分析 .................................................................................................................169
1. 时间复杂度 ..........................................................................................................................169
2. 空间复杂度 ..........................................................................................................................171
一.基础算法
1. 排序
① 快速排序:
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int N=1e6+10;
int n,q[N];
3
void quick_sort(int q[],int l,int r){
if (l>=r){
return;
}
int x=q[l+r>>1],i=l-1,j=r+1;
while (i<j){
do{
i++;
}while (q[i]<x);
do{
j--;
}while (q[j]>x);
if (i<j){
swap(q[i],q[j]);
}
}
quick_sort(q,l,j);
quick_sort(q,j+1,r);
}
int main(){
scanf("%d",&n);
for (int i=0;i<n;i++){
scanf("%d",&q[i]);
}
quick_sort(q,0,n-1);
for (int i=0;i<n;i++){
printf("%d ",q[i]);
}
return 0;
}
② 归并排序
#include<iostream>
#include<cstdio>
#define _for(i,a,b) for (int i=(a);i<=(b);i++)
using namespace std;
const int N=1e5+5;
int a[N],b[N];
inline void c_plus(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
}
void merge_sort(int l,int r){
if (l>=r){
4
return;
}
int mid=l+r>>1;
merge_sort(l,mid),merge_sort(mid+1,r);
int p1=l,p2=mid+1,p=0;
while (p1<=mid || p2<=r){
if (p1<=mid && (p2>r || a[p1]<=a[p2])){
b[++p]=a[p1++];
}else{
b[++p]=a[p2++];
}
}
_for(i,1,p){
a[l+i-1]=b[i];
}
}
int main(){
c_plus();
int n;
cin>>n;
_for(i,1,n){
cin>>a[i];
}
merge_sort(1,n);
_for(i,1,n){
cout<<a[i]<<' ';
}
return 0;
}
归并动图:https://cdn.acwing.com/media/article/image/2019/05/19/1130_4cf170747a-3.gif
5
2. 二分
① 整数二分
左加右减
#include<iostream>
#include<cstdio>
using namespace std;
const int N=100010;
int n,q,a[N];
int main(){
scanf("%d%d",&n,&q);
for (int i=0;i<n;i++){
scanf("%d",&a[i]);
}
while (q--){
int k;
scanf("%d",&k);
int l=0,r=n-1;
while (l<r){//第一种
int mid=l+r>>1;
if (a[mid]>=k){//check:[l, mid]和[mid + 1, r]
r=mid;
}else{
l=mid+1;
}
}
if (a[l]!=k){
puts("-1 -1");
}else{
printf("%d ",l);
l=0,r=n-1;
while (l<r){//第二种
int mid=l+r+1>>1;//+1
if (a[mid]<=k){//check:[l, mid - 1]和[mid, r] 必须取等
l=mid;
}else{
r=mid-1;
}
}
printf("%d\n",l);
}
}
return 0;
剩余170页未读,继续阅读
资源评论
Keven_11
- 粉丝: 30
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功