
模板
user_qym
OIer
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
基础数据结构
rt,数据结构模板,主要是用来保存,需要的也可以拿去用αωα ST表(区间最大值模板): #include<bits/stdc++.h> using namespace std; const int N=1e5*2+10,M=18; int w[N],f[N][M],n,m; void init() { for(int j=0;j<M;j++) for(int i=1;i+(1<<j)-1<=n;i++) if(!j) f[原创 2020-06-05 10:37:20 · 278 阅读 · 1 评论 -
【模板 / 约数】轻拍牛头
轻拍牛头 今天是贝茜的生日,为了庆祝自己的生日,贝茜邀你来玩一个游戏. 贝茜让 N 头奶牛(编号 1 到 N)坐成一个圈。 除了 1 号与 N 号奶牛外,i 号奶牛与 i−1 号和 i+1 号奶牛相邻,N 号奶牛与 1 号奶牛相邻。 农夫约翰用很多纸条装满了一个桶,每一张纸条中包含一个 1 到 1000000 之间的数字。 接着每一头奶牛 i 从桶中取出一张纸条,纸条上的数字用 Ai 表示...原创 2020-03-09 14:36:04 · 368 阅读 · 3 评论 -
【模板】普通平衡树
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int N=100010,INF=1e8; int n; struct Node { int l,r; int key,val; ...原创 2020-02-27 10:56:06 · 202 阅读 · 0 评论 -
【模板】A*算法
A*算法 给定一张N个点(编号1,2…N),M条边的有向图,求从起点S到终点T的第K短路的长度,路径允许重复经过点或边。 注意: 每条最短路中至少要包含一条边。 输入格式 第一行包含两个整数N和M。 接下来M行,每行包含三个整数A,B和L,表示点A与点B之间存在有向边,且边长为L。 最后一行包含三个整数S,T和K,分别表示起点S,终点T和第K短路。 输出格式 输出占一行,包含一个整数,表...原创 2020-02-20 17:16:42 · 657 阅读 · 1 评论 -
【模板】Kruskal
Kruskal 在此提供模板X1(滑稽护体) #include<bits/stdc++.h> using namespace std; const int N=100010,M=2*N,INF=0x3f3f3f3f; int n,m; int p[N]; struct Edge { int a,b,w; }edges[M]; bool cmp(Edge x,Edge y) { ...原创 2020-02-12 10:03:53 · 124 阅读 · 0 评论 -
【模板】Dijkstra+heap
Dijkstra+堆优化 给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为非负值。 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1。 输入格式 第一行包含整数n和m。 接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。 输出格式 输出一个整数,表示1号点到n号点的最短距离。 如果路径不存在,则输出-1。 数据范...原创 2020-02-11 19:05:34 · 240 阅读 · 0 评论 -
【模板】堆
堆是一种数据结构 【Warning】此文章讲述小根堆 这种数据结构是用二叉树来存储堆 这种存储方式是用数组来存储二叉树 存储方式如下: h[t]是编号为t的点 h[t*2]用来存储t的左儿子 h[t*2+1]用来存储t的右儿子 h[t] / \ h[t*2] h[t*2+1] 好了,说到这里,该说一下堆的基本操作了: 其中,Down是往...原创 2020-02-03 21:53:09 · 238 阅读 · 0 评论 -
【模板】Prim
Prim算法 给定一个n个点m条边的无向图,图中可能存在重边和自环,边权可能为负数。 求最小生成树的树边权重之和,如果最小生成树不存在则输出impossible。 给定一张边带权的无向图G=(V, E),其中V表示图中点的集合,E表示图中边的集合,n=|V|,m=|E|。 由V中的全部n个顶点和E中n-1条边构成的无向连通子图被称为G的一棵生成树,其中边的权值之和最小的生成树被称为无向图G的...原创 2020-01-31 17:03:57 · 265 阅读 · 0 评论 -
【模板 & 位运算】二进制中1的个数
二进制中1的个数 给定一个长度为n的数列,请你求出数列中每个数的二进制表示中1的个数。 输入格式 第一行包含整数n。 第二行包含n个整数,表示整个数列。 输出格式 共一行,包含n个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中1的个数。 数据范围 1≤n≤100000, 0≤数列中元素的值≤109 输入样例: 5 1 2 3 4 5 输出样例: 1 1 2 1 2 二进制...原创 2020-01-31 11:52:57 · 1544 阅读 · 0 评论 -
【模板】单链表
单链表 实现一个单链表,链表初始为空,支持三种操作: (1) 向链表头插入一个数; (2) 删除第k个插入的数后面的数; (3) 在第k个插入的数后插入一个数 现在要对该链表进行M次操作,进行完所有操作后,从头到尾输出整个链表。 注意:题目中第k个插入的数并不是指当前链表的第k个数。例如操作过程中一共插入了n 个数,则按照插入的时间顺序,这n个数依次为:第1个插入的数,第2个插入的数,…...原创 2020-01-30 18:56:34 · 306 阅读 · 0 评论 -
【模板】Spfa
Spfa 给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数。 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出impossible。 数据保证不存在负权回路。 输入格式 第一行包含整数n和m。 接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。 输出格式 输出一个整数,表示1号点到n号点的最短距离。 如果路径不存...原创 2020-01-29 15:18:49 · 363 阅读 · 0 评论 -
【模板】最长连续不重复子序列
最长连续不重复子序列 给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续区间,输出它的长度。 输入格式 第一行包含整数n。 第二行包含n个整数(均在0~100000范围内),表示整数序列。 输出格式 共一行,包含一个整数,表示最长的不包含重复数字的连续子序列的长度。 数据范围 1≤n≤100000 输入样例: 5 1 2 2 3 5 输出样例: 3 双指针算法十分基础,在此就不...原创 2020-01-29 10:54:27 · 416 阅读 · 0 评论 -
【模板】并查集
并查集 一共有n个数,编号是1~n,最开始每个数各自在一个集合中。 现在要进行m个操作,操作共有两种: “M a b”,将编号为a和b的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作; “Q a b”,询问编号为a和b的两个数是否在同一个集合中; 输入格式 第一行输入整数n和m。 接下来m行,每行包含一个操作指令,指令为“M a b”或“Q a b”中的一种。 输出格式...原创 2020-01-28 22:02:07 · 313 阅读 · 0 评论 -
【模板】差分
差分 输入一个长度为n的整数序列。 接下来输入m个操作,每个操作包含三个整数l, r, c,表示将序列中[l, r]之间的每个数加上c。 请你输出进行完所有操作后的序列。 输入格式 第一行包含两个整数n和m。 第二行包含n个整数,表示整数序列。 接下来m行,每行包含三个整数l,r,c,表示一个操作。 输出格式 共一行,包含n个整数,表示最终序列。 数据范围 1≤n,m≤100000,...原创 2020-01-27 21:38:14 · 497 阅读 · 0 评论 -
【模板】子矩阵的和(二维前缀和)
子矩阵的和 输入一个n行m列的整数矩阵,再输入q个询问,每个询问包含四个整数x1, y1, x2, y2,表示一个子矩阵的左上角坐标和右下角坐标。 对于每个询问输出子矩阵中所有数的和。 输入格式 第一行包含三个整数n,m,q。 接下来n行,每行包含m个整数,表示整数矩阵。 接下来q行,每行包含四个整数x1, y1, x2, y2,表示一组询问。 输出格式 共q行,每行输出一个询问的结果。...原创 2020-01-27 17:30:49 · 506 阅读 · 0 评论 -
【模板】Bellman_Ford
Bellman_Ford 给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数。 请你求出从1号点到n号点的最多经过k条边的最短距离,如果无法从1号点走到n号点,输 出impossible。 注意:图中可能 存在负权回路 。 输入格式 第一行包含三个整数n,m,k。 接下来m行,每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为 z。 输出格式 输出一...原创 2020-01-27 12:47:53 · 450 阅读 · 0 评论 -
【模板】Floyd
Floyd 给定一个n个点m条边的有向图,图中可能存在重边和自环,边权可能为负数。 再给定k个询问,每个询问包含两个整数x和y,表示查询从点x到点y的最短距离, 如果路径不存在,则输出“impossible”。 数据保证图中不存在负权回路。 输入格式 第一行包含三个整数n,m,k 接下来m行,每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。 接下来k行,每行包含两...原创 2020-01-26 15:36:10 · 708 阅读 · 0 评论 -
【模板】Dijkstra
Dijkstra 给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值。 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1。 输入格式 第一行包含整数n和m。 接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。 输出格式 输出一个整数,表示1号点到n号点的最短距离。 如果路径不存在,则输出-1。 数据范围 1≤n...原创 2020-01-26 13:27:59 · 488 阅读 · 0 评论 -
【模板】2的N次幂
2的N次幂 题目描述 输入 n,计算 2^n,已知n<=1000 。 输入格式 输入一个正整数n 输出格式 输出幂的结果 输入样例 1 10 输出样例 1 1024 这题是一道模板题,不懂的见注释 #include<iostream> #include<string> using namespace std; int a[10001]; i...原创 2020-01-25 12:32:28 · 1502 阅读 · 0 评论 -
【模板】前缀和
前缀和 输入一个长度为n的整数序列。 接下来再输入m个询问,每个询问输入一对l, r。 对于每个询问,输出原序列中从第l个数到第r个数的和。 输入格式 第一行包含两个整数n和m。 第二行包含n个整数,表示整数数列。 接下来m行,每行包含两个整数l和r,表示一个询问的区间范围。 输出格式 共m行,每行输出一个询问的结果。 数据范围 1≤l≤r≤n, 1≤n,m≤100000, −100...原创 2020-01-26 10:10:33 · 459 阅读 · 0 评论 -
【模板】迷宫#1
迷宫 题目描述 鹏鹏在一个迷宫里困住了。 迷宫是长方形的,有 n 行 m 列个格子。一共有 3 类格子,空地用字符’.’ 表示,墙壁用’#’表示,陷阱用’*’表示。 特别地,迷宫中有两个特殊的格子:起点用’S’表示;终点用’E’表示。 起点和终点都是空地。(’S’和’E’均为大写字母) 鹏鹏的任务是:从起点出发,沿着某条路径,走到终点。 游戏对路径的要求有三条:每次只能向相邻格子(上/下...原创 2020-01-25 16:54:25 · 3050 阅读 · 0 评论 -
【模板】二分查找
二分查找 题目描述 给定一个包含n个整数的数列{An}和包含m个不重复整数的数列{Bm}。 输出既包含于{An}也包含于{Bm}的整数的个数k。 输入格式 输入共4行: 第1行仅包含一个正整数n; 第2行包含n个整数Ai,数字之间用一个空格分隔; 第3行仅包含一个正整数m; 第4行包含m个整数Bi,数字之间用一个空格分隔。 输出格式 输出仅包含一个整数k。 输入样例 1...原创 2020-01-25 15:38:26 · 1962 阅读 · 1 评论 -
【模板】最短编辑距离
最短编辑距离 给定两个字符串A和B,现在要将A经过若干操作变为B,可进行的操作有: 1.删除–将字符串A中的某个字符删除。 2.插入–在字符串A的某个位置插入某个字符。 3.替换–将字符串A中的某个字符替换为另一个字符。 现在请你求出,将A变为B至少需要进行多少次操作。 输入格式 第一行包含整数n,表示字符串A的长度。 第二行包含一个长度为n的字符串A。 第三行包含整数m,表示字符串B的...原创 2020-01-25 14:59:00 · 203 阅读 · 0 评论 -
【模板】多重背包问题
多重背包问题 I 有 N 种物品和一个容量是 V 的背包。 第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。 求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。 输出最大价值。 输入格式 第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。 接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数...原创 2020-01-23 21:35:23 · 250 阅读 · 0 评论 -
【模板】分组背包问题
分组背包问题 有 N 组物品和一个容量是 V 的背包。 每组物品有若干个,同一组内的物品最多只能选一个。 每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。 求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。 输出最大价值。 输入格式 第一行有两个整数 N,V,用空格隔开,分别表示物品组数和背包容量。 接下来有 N 组数据: 每组数据第一行有...原创 2020-01-24 12:49:30 · 246 阅读 · 0 评论 -
【模板】01背包
有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 vi,价值是 wi。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。 输出最大价值。 输入格式 第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。 接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。 输出格式 输出一个...原创 2020-01-23 16:35:22 · 863 阅读 · 0 评论 -
【模板】完全背包问题
完全背包问题 有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。 第 i 种物品的体积是 vi,价值是 wi。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。 输出最大价值。 输入格式 第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。 接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 种物品的体积和价值。 输...原创 2020-01-23 21:02:22 · 222 阅读 · 0 评论 -
【模板】最长上升子序列Ⅰ
最长上升子序列 给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。 输入格式 第一行包含整数N。 第二行包含N个整数,表示完整序列。 输出格式 输出一个整数,表示最大长度。 数据范围 1≤N≤1000, −109≤数列中的数≤109 输入样例: 7 3 1 2 1 8 5 6 输出样例: 4 解法如下: f数组用来储存以第i个数结尾最大的上升子序列个数 f[i]表示第i...原创 2020-01-24 16:51:57 · 234 阅读 · 0 评论 -
【模板】最长上升子序列 Ⅱ
最长上升子序列 Ⅱ 给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。 输入格式 第一行包含整数N。 第二行包含N个整数,表示完整序列。 输出格式 输出一个整数,表示最大长度。 数据范围 1≤N≤100000, −109≤数列中的数≤109 输入样例: 7 3 1 2 1 8 5 6 输出样例: 4 这题只是比最长上升子序列Ⅰ数据大了一些而已 具体做法: DP+二分 用...原创 2020-01-24 17:49:19 · 256 阅读 · 0 评论 -
【模板】最长公共子序列
最长公共子序列 最长上升子序列Ⅰ 最长上升子序列 Ⅱ 给定两个长度分别为N和M的字符串A和B,求既是A的子序列又是B的子序列的字符串长度最长是多少。 输入格式 第一行包含两个整数N和M。 第二行包含一个长度为N的字符串,表示字符串A。 第三行包含一个长度为M的字符串,表示字符串B。 字符串均由小写字母构成。 输出格式 输出一个整数,表示最大长度。 数据范围 1≤N≤1000, 输入样...原创 2020-01-25 13:52:20 · 1680 阅读 · 0 评论 -
【模板】搜索(DFS&BFS)
搜索是一种万能的算法,此篇博客就是用来讲解搜索的模板&概念 深度优先搜索(DFS) 这种搜索复杂度较大,用于数据在1~50左右的题目 模板: void dfs(/*当前状态*/) { if(/*达到目标状态*/) { /*DoSomeThing*/ } else//未达到目标状态 { for(/*进行搜索*/) { /*标记*/ dfs(/*状态*...原创 2020-01-24 15:50:08 · 1320 阅读 · 0 评论