模板
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 · 244 阅读 · 1 评论 -
【模板 / 约数】轻拍牛头
轻拍牛头今天是贝茜的生日,为了庆祝自己的生日,贝茜邀你来玩一个游戏.贝茜让 N 头奶牛(编号 1 到 N)坐成一个圈。除了 1 号与 N 号奶牛外,i 号奶牛与 i−1 号和 i+1 号奶牛相邻,N 号奶牛与 1 号奶牛相邻。农夫约翰用很多纸条装满了一个桶,每一张纸条中包含一个 1 到 1000000 之间的数字。接着每一头奶牛 i 从桶中取出一张纸条,纸条上的数字用 Ai 表示...原创 2020-03-09 14:36:04 · 329 阅读 · 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 · 176 阅读 · 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 · 602 阅读 · 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 · 103 阅读 · 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 · 211 阅读 · 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 · 217 阅读 · 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 · 234 阅读 · 0 评论 -
【模板 & 位运算】二进制中1的个数
二进制中1的个数给定一个长度为n的数列,请你求出数列中每个数的二进制表示中1的个数。输入格式第一行包含整数n。第二行包含n个整数,表示整个数列。输出格式共一行,包含n个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中1的个数。数据范围1≤n≤100000,0≤数列中元素的值≤109输入样例:51 2 3 4 5输出样例:1 1 2 1 2二进制...原创 2020-01-31 11:52:57 · 1516 阅读 · 0 评论 -
【模板】单链表
单链表实现一个单链表,链表初始为空,支持三种操作:(1) 向链表头插入一个数;(2) 删除第k个插入的数后面的数;(3) 在第k个插入的数后插入一个数现在要对该链表进行M次操作,进行完所有操作后,从头到尾输出整个链表。注意:题目中第k个插入的数并不是指当前链表的第k个数。例如操作过程中一共插入了n个数,则按照插入的时间顺序,这n个数依次为:第1个插入的数,第2个插入的数,…...原创 2020-01-30 18:56:34 · 277 阅读 · 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 · 329 阅读 · 0 评论 -
【模板】最长连续不重复子序列
最长连续不重复子序列给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续区间,输出它的长度。输入格式第一行包含整数n。第二行包含n个整数(均在0~100000范围内),表示整数序列。输出格式共一行,包含一个整数,表示最长的不包含重复数字的连续子序列的长度。数据范围1≤n≤100000输入样例:51 2 2 3 5输出样例:3双指针算法十分基础,在此就不...原创 2020-01-29 10:54:27 · 339 阅读 · 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 · 277 阅读 · 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 · 460 阅读 · 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 · 476 阅读 · 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 · 427 阅读 · 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 · 656 阅读 · 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 · 437 阅读 · 0 评论 -
【模板】2的N次幂
2的N次幂题目描述输入 n,计算 2^n,已知n<=1000 。输入格式输入一个正整数n输出格式输出幂的结果输入样例 1 10输出样例 11024这题是一道模板题,不懂的见注释#include<iostream>#include<string>using namespace std;int a[10001]; i...原创 2020-01-25 12:32:28 · 1474 阅读 · 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 · 433 阅读 · 0 评论 -
【模板】迷宫#1
迷宫题目描述鹏鹏在一个迷宫里困住了。迷宫是长方形的,有 n 行 m 列个格子。一共有 3 类格子,空地用字符’.’ 表示,墙壁用’#’表示,陷阱用’*’表示。特别地,迷宫中有两个特殊的格子:起点用’S’表示;终点用’E’表示。 起点和终点都是空地。(’S’和’E’均为大写字母)鹏鹏的任务是:从起点出发,沿着某条路径,走到终点。游戏对路径的要求有三条:每次只能向相邻格子(上/下...原创 2020-01-25 16:54:25 · 3001 阅读 · 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 · 1913 阅读 · 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 · 180 阅读 · 0 评论 -
【模板】多重背包问题
多重背包问题 I有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数...原创 2020-01-23 21:35:23 · 203 阅读 · 0 评论 -
【模板】分组背包问题
分组背包问题有 N 组物品和一个容量是 V 的背包。每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行有两个整数 N,V,用空格隔开,分别表示物品组数和背包容量。接下来有 N 组数据:每组数据第一行有...原创 2020-01-24 12:49:30 · 219 阅读 · 0 评论 -
【模板】01背包
有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。输出格式输出一个...原创 2020-01-23 16:35:22 · 826 阅读 · 0 评论 -
【模板】完全背包问题
完全背包问题有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。第 i 种物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 种物品的体积和价值。输...原创 2020-01-23 21:02:22 · 198 阅读 · 0 评论 -
【模板】最长上升子序列Ⅰ
最长上升子序列给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。输入格式第一行包含整数N。第二行包含N个整数,表示完整序列。输出格式输出一个整数,表示最大长度。数据范围1≤N≤1000,−109≤数列中的数≤109输入样例:73 1 2 1 8 5 6输出样例:4解法如下:f数组用来储存以第i个数结尾最大的上升子序列个数f[i]表示第i...原创 2020-01-24 16:51:57 · 205 阅读 · 0 评论 -
【模板】最长上升子序列 Ⅱ
最长上升子序列 Ⅱ给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。输入格式第一行包含整数N。第二行包含N个整数,表示完整序列。输出格式输出一个整数,表示最大长度。数据范围1≤N≤100000,−109≤数列中的数≤109输入样例:73 1 2 1 8 5 6输出样例:4这题只是比最长上升子序列Ⅰ数据大了一些而已具体做法: DP+二分用...原创 2020-01-24 17:49:19 · 230 阅读 · 0 评论 -
【模板】最长公共子序列
最长公共子序列最长上升子序列Ⅰ最长上升子序列 Ⅱ给定两个长度分别为N和M的字符串A和B,求既是A的子序列又是B的子序列的字符串长度最长是多少。输入格式第一行包含两个整数N和M。第二行包含一个长度为N的字符串,表示字符串A。第三行包含一个长度为M的字符串,表示字符串B。字符串均由小写字母构成。输出格式输出一个整数,表示最大长度。数据范围1≤N≤1000,输入样...原创 2020-01-25 13:52:20 · 1633 阅读 · 0 评论 -
【模板】搜索(DFS&BFS)
搜索是一种万能的算法,此篇博客就是用来讲解搜索的模板&概念深度优先搜索(DFS)这种搜索复杂度较大,用于数据在1~50左右的题目模板:void dfs(/*当前状态*/){ if(/*达到目标状态*/) { /*DoSomeThing*/ } else//未达到目标状态 { for(/*进行搜索*/) { /*标记*/ dfs(/*状态*...原创 2020-01-24 15:50:08 · 1295 阅读 · 0 评论