
Acwing基础课
Acwing基础课
阿斯卡码
这个作者很懒,什么都没留下…
展开
-
C++ STL
STL 是⼀个 C++ 软件库,⾥⾯包含算法(algorithms)、容 器(containers)、函数(functions)、迭代器(iterators)创建string类型变量string s; 直接创建一个空的(大小为0)的string类型变量sstring s=*char; 创建string时直接用字符串内容对其赋值,注意字符串要用双引号""string s(int n,char c); 创建一个string,由n个c组成,注意c是字符型要用单括号''读入stringcin>&g原创 2021-04-16 18:45:31 · 244 阅读 · 0 评论 -
【6.贪心-模板】5.推公式(模板)
推公式一.耍杂技的牛一.耍杂技的牛题目来源:耍杂技的牛#include <iostream>#include <algorithm>using namespace std;typedef long long ll;typedef pair<int, int> PII;const int N = 5e4 + 5;PII a[N];int main(){ int n; cin >> n; for(int i = 0;原创 2021-08-16 19:54:39 · 116 阅读 · 0 评论 -
【6.贪心-模板】4.绝对值不等式(模板)
绝对值不等式一.货仓选址一.货仓选址题目来源:货仓选址#include <algorithm>using namespace std;const int N = 100005;int n, res;int a[N];int main(){ scanf("%d", &n); for (int i = 1; i <= n; i ++ ) scanf("%d", &a[i]); sort(a+1, a + n+1); /原创 2021-08-16 19:54:16 · 165 阅读 · 0 评论 -
【6.贪心-模板】3.排序不等式(模板)
排序不等式一.排队打水一.排队打水题目来源:排队打水#include <iostream>#include <algorithm>using namespace std;const int N = 100010;typedef long long LL;int n;int a[N];int main(){ cin >> n; for(int i = 1; i <=n; i ++) cin >> a[i];原创 2021-08-12 12:42:49 · 130 阅读 · 0 评论 -
【6.贪心-模板】2.Huffman树(模板)
Huffman树一.合并果子一.合并果子题目来源:合并果子#include <iostream>#include <algorithm>#include <queue>using namespace std;int main(){ int n; scanf("%d", &n); priority_queue<int, vector<int>, greater<int>> heap;原创 2021-08-12 12:42:35 · 128 阅读 · 0 评论 -
【6.贪心-模板】1.区间问题(模板)
区间问题一.区间选点二.最大不相交区间数量三.区间分组四.区间覆盖一.区间选点题目来源:区间选点#include <iostream>#include <algorithm>using namespace std;const int N = 100010;int n;struct Range{ int l, r; bool operator< (const Range &W)const { return r原创 2021-08-12 12:41:43 · 185 阅读 · 0 评论 -
【5.动态规划-模板】7.树形DP(模板)
树形DP一.没有上司的舞会一.没有上司的舞会题目来源:没有上司的舞会#include <iostream>#include <cstring>using namespace std;const int N = 6010;int e[N] , ne[N] , h[N] , idx;int happy[N];int n;bool has_fa[N];int f[N][2];//邻接表储存树void add(int a , int b){ e[原创 2021-08-12 12:41:14 · 243 阅读 · 0 评论 -
【5.动态规划-模板】3.区间DP(模板)
区间DP一. 石子合并一. 石子合并题目来源:石子合并//f[i][j]表示将i到j合并成一堆的方案的集合#include<bits/stdc++.h>using namespace std;const int N=310,INF=0x3f3f3f3f;int f[N][N];int s[N];int n;int main(){ cin>>n; memset(f,INF,sizeof(f)); //记得初始化 f原创 2021-08-12 12:39:57 · 88 阅读 · 0 评论 -
【5.动态规划-模板】1.背包问题(模板)
背包问题一.01背包问题二.完全背包问题三.多重背包问题 I四.多重背包问题 II五.分组背包问题一.01背包问题题目来源:01背包问题//一维AC#include<bits/stdc++.h>using namespace std;const int MAXN = 1005;int v[MAXN]; // 体积int w[MAXN]; // 价值 int f[MAXN]; // f[i][j], j体积下前i个物品的最大价值 int main() {原创 2021-08-11 10:36:49 · 130 阅读 · 0 评论 -
【5.动态规划-模板】2.线性DP(模板)
线性DP一.数字三角形二.最长上升子序列 I三.最长上升子序列 II四.最长公共子序列五.最短编辑距离六.编辑距离一.数字三角形题目来源:数字三角形//倒序不用处理边界#include<iostream>#include<cstdio>#include<algorithm>using namespace std;const int INF = 2e9;const int N = 1010;int f[N][N];int n,a[N][N];int原创 2021-08-12 12:39:43 · 199 阅读 · 0 评论 -
【5.动态规划-模板】4.计数类DP(模板)
计数类DP一. 整数划分一. 整数划分题目来源: 整数划分/*// f[i][j] = f[i - 1][j] + f[i][j - i]#include <iostream>using namespace std;const int N = 1e3 + 7, mod = 1e9 + 7;int f[N][N];int main() { int n; cin >> n; for (int i = 0; i <= n; i ++原创 2021-08-12 12:40:16 · 130 阅读 · 0 评论 -
【5.动态规划-模板】5.数位统计DP(模板)
数位统计DP一.计数问题一.计数问题题目来源:计数问题#include <iostream>#include <vector>using namespace std;int base[10];int f[10][10];int g[10][10];void init(){ base[0] = 1; for(int i = 1 ; i <= 9 ; i++) base[i] = base[i-1]*10; //从00……0 -原创 2021-08-12 12:40:33 · 91 阅读 · 0 评论 -
【5.动态规划-模板】6.状态压缩DP
状态压缩DP一.蒙德里安的梦想二.最短Hamilton路径一.蒙德里安的梦想题目来源:蒙德里安的梦想#include<bits/stdc++.h>using namespace std;const int N=12, M = 1<< N; long long f[N][M] ;// 第一维表示列, 第二维表示所有可能的状态bool st[M]; //存储每种状态是否有奇数个连续的0,如果奇数个0是无效状态,如果是偶数个零置为true。//vector<原创 2021-08-12 12:40:56 · 249 阅读 · 0 评论 -
【5.动态规划-模板】8.记忆化搜索(模板)
记忆化搜索一.滑雪一.滑雪题目来源:滑雪#include <algorithm>#include <cstring>#include <iostream>using namespace std;const int N = 3e2 + 10;int n, m;int g[N][N];int f[N][N];//(-1 0)(0 1)(1 0)(0 -1)//上 右 下 左 //int dx[4] = {-1, 0, 1, 0}原创 2021-08-12 12:41:27 · 470 阅读 · 0 评论 -
【4.数学知识-模板】2.约数(模板)
约数一. 试除法求约数二.约数个数三.约数之和四.最大公约数一. 试除法求约数题目来源:试除法求约数#include <algorithm>#include <iostream>#include <vector>using namespace std;int n;void get_divisors(int n){ vector<int> res; for (int i = 1; i <= n / i; i++)原创 2021-08-11 10:32:41 · 109 阅读 · 0 评论 -
【4.数学知识-模板】9.容斥原理(模板)
容斥原理一.能被整除的数一.能被整除的数题目来源:能被整除的数#include<iostream>using namespace std;typedef long long LL;const int N = 20;int p[N], n, m;int main() { cin >> n >> m; for(int i = 0; i < m; i++) cin >> p[i]; int res = 0;原创 2021-08-11 10:35:58 · 283 阅读 · 0 评论 -
【4.数学知识-模板】10.博弈论(模板)
博弈论一.Nim游戏二.台阶-Nim游戏三.集合-Nim游戏四.拆分-Nim游戏一.Nim游戏题目来源:Nim游戏#include <iostream>#include <cstdio>using namespace std;/*先手必胜状态:先手操作完,可以走到某一个必败状态先手必败状态:先手操作完,走不到任何一个必败状态先手必败状态:a1 ^ a2 ^ a3 ^ ... ^an = 0先手必胜状态:a1 ^ a2 ^ a3 ^ ... ^an ≠ 0*/原创 2021-08-11 10:36:14 · 131 阅读 · 0 评论 -
【4.数学知识-模板】8.组合数(模板)
组合数一.求组合数 I二.求组合数 II三.求组合数 III四.求组合数 IV五.满足条件的01序列一.求组合数 I题目来源:求组合数 I#include<iostream>using namespace std;const int mod = 1e9+7;long long f[2010][2010];int main(){ for(int i=0;i<=2000;i++) { for(int j=0;j<=i;j++)原创 2021-08-11 10:35:29 · 209 阅读 · 0 评论 -
【4.数学知识-模板】1.质数(模板)
质数一. 试除法判定质数二. 分解质因数三. 筛质数(1)朴素筛法(2)埃式筛法(3)线性筛法一. 试除法判定质数题目来源:试除法判定质数#include<bits/stdc++.h>using namespace std;bool is_prime(int n){ if(n==1) return false; for(int i=2;i<=n/i;i++) { if(n%i==0) return false; }原创 2021-08-10 23:47:36 · 253 阅读 · 0 评论 -
【4.数学知识-模板】4.快速幂(模板)
快速幂一.快速幂二.快速幂求逆元一.快速幂题目来源:快速幂#include <iostream>using namespace std;typedef long long LL;int quick_pow(int a, int k, int p){ int res = 1 ; while (k) { if (k & 1) res = (LL)res * a % p; k >>= 1原创 2021-08-11 10:33:43 · 81 阅读 · 0 评论 -
【4.数学知识-模板】6.中国剩余定理(模板)
中国剩余定理一. 表达整数的奇怪方式一. 表达整数的奇怪方式题目来源:表达整数的奇怪方式#include <cstdio>#include <iostream>using namespace std;typedef long long LL;int n;int flog=1;//有解1,无解0LL exgcd(LL a, LL b, LL &x, LL &y){ if(b == 0) { x = 1, y = 0;原创 2021-08-11 10:34:20 · 92 阅读 · 0 评论 -
【4.数学知识-模板】5.扩展欧几里得算法(模板)
扩展欧几里得算法一.扩展欧几里得算法二.线性同余方程一.扩展欧几里得算法题目来源:扩展欧几里得算法#include<bits/stdc++.h>using namespace std;//扩展欧几里得返回的也是最大公约数int exgcd(int a, int b, int &x, int &y)//注意:x,y引用{ //返回gcd并求出解(引用带回) if(b==0) { x = 1, y = 0; r原创 2021-08-11 10:34:00 · 167 阅读 · 0 评论 -
【4.数学知识-模板】7.高斯消元(模板)
高斯消元一. 高斯消元解线性方程组二.高斯消元解异或线性方程组一. 高斯消元解线性方程组题目来源:高斯消元解线性方程组#include <iostream>#include <algorithm>#include <cmath>using namespace std;const int N = 110;const double eps = 1e-6;int n;double a[N][N];int gauss(){ int c,原创 2021-08-11 10:35:10 · 131 阅读 · 0 评论 -
【4.数学知识-模板】3.欧拉函数(模板)
欧拉函数一.欧拉函数二.筛法求欧拉函数一.欧拉函数题目来源:欧拉函数//x的质因数:p1,p2, p3 .... pk;//欧拉函数:phi(x) = x * (1-1/p1) * (1-1/p2) * (1-1/p3) * ...... * (1-1/pk)#include <iostream>#include <algorithm>#include <cstring>#include <cstdio>using namespace st原创 2021-08-11 10:33:06 · 136 阅读 · 0 评论 -
【3.图与搜索-模板】4.树与图的广度优先遍历(模板)
1.图中点的层次#include <cstring>#include <iostream>using namespace std;const int N=1e5+10;int h[N], e[N], idx, ne[N];//e[i]存储图中的下标int d[N]; //存储每个节点离起点的距离 d[1]=0int n, m; //n个节点m条边int q[N]; //存储层次遍历序列 0号节点是编号为1的节点/*4 51 22 33 41 3原创 2021-08-10 23:45:41 · 141 阅读 · 0 评论 -
【3.图与搜索-模板】6.最短路径(模板)
最短路径一. Dijkstra算法(1)Dijkstra求最短路 I(2)Dijkstra求最短路 II二.bellman-ford算法(1)有边数限制的最短路三.spfa算法(1)spfa求最短路(2)spfa判断负环四.Floyd算法(1)Floyd求最短路一. Dijkstra算法(1)Dijkstra求最短路 I题目来源: Dijkstra求最短路 I#include<iostream>#include<algorithm>#include<cstring&原创 2021-08-10 23:46:19 · 238 阅读 · 0 评论 -
【3.图与搜索-模板】5.拓扑排序(模板)
1.有向图的拓扑序列#include <iostream>#include <algorithm>#include <cstring>#include <queue>using namespace std;const int N = 1e5 + 10;int e[N],ne[N],h[N],idx;//e,ne,h,idx 邻接表模板int d[N]; //d代表每个元素的入度int n,m,top[N],cnt原创 2021-08-10 23:45:58 · 168 阅读 · 0 评论 -
【3.图与搜索-模板】8.二分图(模板)
二分图一. 染色法判定二分图(1)染色法判定二分图二.匈牙利算法(1)二分图的最大匹配一. 染色法判定二分图(1)染色法判定二分图题目来源:染色法判定二分图#include <iostream>#include <algorithm>#include <cstring>using namespace std;const int N = 1e5 + 10, M = 2e5 + 10; // 无向图, 所以最大边数是2倍int e[M], ne[M], h原创 2021-08-10 23:46:56 · 165 阅读 · 0 评论 -
【3.图与搜索-模板】1.DFS广度优先搜索(模板)
DFS广度优先搜索1.排列数字[2. n-皇后问题](https://www.acwing.com/problem/content/845/)1.排列数字#include<bits/stdc++.h>using namespace std;const int N=10;int n;int path[N];bool st[N];void dfs(int u){ if(u==n) { for(int i=0;i<n;i++)printf("%原创 2021-08-10 23:44:38 · 287 阅读 · 0 评论 -
【3.图与搜索-模板】3.树与图的深度优先遍历(模板)
1.树的重心#include <iostream>#include <algorithm>#include <cstring>using namespace std;const int N = 1e5 + 10; //数据范围是10的5次方const int M = 2 * N; //以有向图的格式存储无向图,所以每个节点至多对应2n-2条边int h[N]; //邻接表存储树,有n个节点,所以需要n个队列头节点int e[M]; //原创 2021-08-10 23:45:23 · 151 阅读 · 0 评论 -
【3.图与搜索-模板】2.BFS宽度优先搜索(模板)
BFS宽度优先搜索1.走迷宫[ 2.八数码](https://www.acwing.com/problem/content/847/)1.走迷宫#include<bits/stdc++.h>using namespace std;const int N=110;typedef pair<int,int> pii;int n,m;int g[N][N];//输入的图int d[N][N];//点的距离pii q[N*N];//队列存储int bfs(){原创 2021-08-10 23:45:04 · 153 阅读 · 0 评论 -
【3.图与搜索-模板】7.最小生成树(模板)
最小生成树一.Prim算法(1)Prim算法求最小生成树二.Kruskal算法(1)Kruskal算法求最小生成树一.Prim算法(1)Prim算法求最小生成树题目来源:Prim算法求最小生成树/*S:当前已经在联通块中的所有点的集合1. dist[i] = inf2. for n 次 t<-S外离S最近的点 利用t更新S外点到S的距离 st[t] = truen次迭代之后所有点都已加入到S中联系:Dijkstra算法是更新到起始点的距离,Prim是更新到集合原创 2021-08-10 23:46:36 · 72 阅读 · 0 评论 -
【2.数据结构-模板】8.Trie(模板)
Trie1.Trie字符串统计2.最大异或对1.Trie字符串统计#include <iostream>using namespace std;const int N = 1e5 + 10;int son[N][26]; // 其中存放的是:子节点对应的idx。其中son数组的第一维是:父节点对应的idx,第第二维计数是:其直接子节点('a' - '0')的值为二维下标。int cnt [N]; // 以“abc”字符串为例,最后一个字符---‘c’对应的idx作为cnt数组原创 2021-08-09 22:55:11 · 278 阅读 · 0 评论 -
【2.数据结构-模板】3.栈(模板)
栈1.模拟栈2.表达式求值1.模拟栈#include<iostream>using namespace std;const int N=100010;int stack[N],top; //初始top=0,表示空int main(){ int m; cin>>m; while(m--) { string opration; int x;原创 2021-08-09 17:08:21 · 240 阅读 · 0 评论 -
【2.数据结构-模板】7.KMP(模板)
1.KMP字符串#include<bits/stdc++.h>using namespace std;const int N=1000000+10;char s[N],p[N];int ne[N];int main(){ int n,m; cin>>n>>p+1>>m>>s+1; //next求法 for(int i=2,j=0;i<=n;i++) { while(j&am原创 2021-08-09 22:54:53 · 178 阅读 · 0 评论 -
【2.数据结构-模板】9.并查集(模板)
1.合并集合#include<iostream>using namespace std;const int N=100010;int p[N]; //定义多个集合//返回祖宗节点+路径压缩int find(int x){ if(p[x]!=x) p[x]=find(p[x]); //p[x]表示x的父节点,每个集合中只有祖宗节点的p[x]值等于他自己,即:p[x]=x; r原创 2021-08-09 22:55:33 · 252 阅读 · 0 评论 -
【2.数据结构-模板】1.单链表(模板)
1. 单链表#include<bits/stdc++.h>using namespace std;const int N=100000+10;int head;//头节点int idx;//用到点的下标int ne[N];//指针int e[N];//数值//链表从下标0开始//初始化void init(){ head=-1; idx=0;}//插入头节点void add_to_head(int x){ e[idx]=x; ne[原创 2021-08-09 16:58:51 · 348 阅读 · 0 评论 -
【2.数据结构-模板】2.双链表(模板)
1.双链表#include<iostream>using namespace std;const int N = 1e5 + 10;int m;int e[N];int l[N];int r[N];int idx;//初始化void init(){ l[1] = 0,r[0] = 1; //初始化[0]->[1] 第一个点的右边是 1 第二个点的左边是 0 idx = 2;原创 2021-08-09 17:02:23 · 186 阅读 · 0 评论 -
【2.数据结构-模板】4.队列(模板)
1.模拟队列#include<iostream>using namespace std;const int N = 1e5 + 10;int q[N];int main() { int n; cin >> n; int hh = 0, tt = 0; while (n--) { string op; int x; cin >> op; if (op ==原创 2021-08-09 22:53:43 · 210 阅读 · 0 评论 -
【2.数据结构-模板】6.单调队列(模板)
1.滑动窗口#include<bits/stdc++.h>using namespace std;const int N=1000000+10;int a[N];int q[N];int n,k;int main(){ cin>>n>>k; for(int i=0;i<n;i++) scanf("%d",&a[i]); // 第一行输出,从左至右,每个位置滑动窗口中的最小值 int hh=0原创 2021-08-09 22:54:39 · 415 阅读 · 0 评论