算法模板
共 9 篇文章
约数个数和约数之和
约数个数#include<iostream>#include<unordered_map>const int MOD=1e9+7;using namespace std;int n;int main(){ unordered_map<int,int>mp;
求组合数
暂无摘要...
Dijkstra求最短路径
Dijkstra求最短路径原题链接代码#include<iostream>#include<cstring>using namespace std;const int N=510,M=1e5+10,INF=0x3f3f3f3f;int n,m,g[N][N],dist[N];
Floyd求最短路径
Floyd求最短路径原题链接#include<iostream>#include<cstring>using namespace std;const int N=210,M=20010,INF=0x3f3f3f3f;int g[N][N];int n,m,Q;int main
搜索与图论
树与图的存储树是一种特殊的图,与图的存储方式相同。对于无向图中的边ab,存储两条有向边a->b, b->a。因此我们可以只考虑有向图的存储。(1) 邻接矩阵:g[a][b] 存储边a->b(2) 邻接表:可以用数组来存储邻接表,h[n]表示第n个顶点的头节点,e[n]表示第n条边的
KMP字符串
给定一个模式串S,以及一个模板串P,所有字符串中只包含大小写英文字母以及阿拉伯数字。模板串P在模式串S中多次作为子串出现。求出模板串P在模式串S中所有出现的位置的起始下标。输入格式第一行输入整数N,表示字符串P的长度。第二行输入字符串P。第三行输入整数M,表示字符串S的长度。第四行输入字符串S。输出
二分法
整数二分模板bool check(int x) {/* ... */} // 检查x是否满足某种性质// 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用:int bsearch_1(int l, int r){ while (l < r) {
归并排序
模板void merge_sort(int q[], int l, int r){ if (l >= r) return; int mid = l + r >> 1; merge_sort(q, l, mid); merge_sort(q, mid + 1,
快速排序
模板void quick_sort(int q[], int l, int r){ if (l >= r) return; int i = l - 1, j = r + 1, x = q[l + r >> 1]; while (i < j) {