模板题
Freeman Z
都柏林理工大学博士录取
巴黎高等电子学院工程师录取
李莫瑞克大学硕士在读(主持爱尔兰软件研究中心)
重庆2022优秀毕业生
展开
-
[ACwing]896. 最长上升子序列 II
算法标签 贪心 二分题目简叙思路维护一个单调栈,如果是大于栈末尾元素就插入,形成单调栈,否则就找到第一个大于的元素进行替换,通过这种方式计算最长子序列的长度代码#include<iostream>using namespace std;int n;const int N=1e5+10;int stk[N];//模拟单调栈int arr[N];//数据int cnt;int find(int x){//找到第一个栈里数据大于X的 int l = 1, r =原创 2020-08-04 22:51:33 · 214 阅读 · 0 评论 -
[AcWing]898. 数字三角形
算法标签 线性DP题目简叙思路当前的状态由左上或者上方的两个点决定代码#include<iostream>using namespace std;int n;const int INF=1e9;const int N=5e3+10;int f[N][N],a[N][N];int main(){ cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=i;j++)原创 2020-08-04 16:45:05 · 226 阅读 · 0 评论 -
[AcWing]846. 树的重心
算法标签 dfs,树形DP题目简叙思路每次寻找删除节点之后的剩余联通块最大节点代码#include<iostream>#include<cstring>using namespace std;const int N=1e5+10;int h[N],e[2*N],ne[2*N],idx;//h头节点//e元素 双向图 两倍数据//ne指针 //idx下标int ans=N;//ans初始化节点数量N个bool st[N];//布尔数组,控制是否原创 2020-08-03 21:34:50 · 218 阅读 · 0 评论 -
[Acwing]AcWing 841. 字符串哈希
算法标签 哈希,字符串哈希题目简叙思路依据经验,我们使得数值尽量重复时需要限定:1.p最好是131或者133312.对数值%(226),我们刚好采取unsigned long long 溢出时的状态也是一致的这样几乎没有可能重复从而冲突将字符串的前缀转换为数来存值由于每位的权值是不一样的 所以每个前缀值都对应着唯一的一种字符串所以相减后的值也应该是唯一的 从而利用相减后的值可以判断字符串的区间段是否相等字符串str="ABCD"字符串前缀对应h[1]="A"h[2]="AB"原创 2020-07-31 18:14:50 · 340 阅读 · 0 评论 -
[Acwing]840. 模拟散列表
算法标签:哈希表题目简叙思路拉链法:数组加链表使用映射的方式把109映射到105的范围之内这样有可能多个数据在同一地址下,我们只需要把对应地址做成链表形式进行查询和插入即可注意:1.映射值为k=(tmp%N+N)%N;,为了避免tmp%N是负数所以+N,然后为了避免溢出再%N2.%N中N的数据最好是范围数据的第一个素数,这样在数学期望的角度上数组内重复的概率最小图显:插入与查找两种情况单链表可以参考[模板题]单链表代码#include<iostream>#inc原创 2020-07-31 16:08:06 · 181 阅读 · 0 评论 -
[AcWing]837. 连通块中点的数量
算法标签 并查集题目简叙思路合并集合的变体一、初始化for(int i=0;i<n;i++)p[i]=i,cnt[i]=1;p[i]=i表示这是一个树根,一个祖节点cnt[i]=1表示是这个集合初始化只有它一个元素二、找根节点int find(int x){ if(p[x]!=x)p[x]=find(p[x]); return p[x];}三、合并连通块 if(op=="C"){ cin>>a>>b;原创 2020-07-27 18:10:05 · 224 阅读 · 0 评论 -
[AcWing]143. 最大异或对
算法标签 Trie字典树贪心来源 《算法竞赛进阶指南》题目简叙思路使用二叉树的结构来表示整个插入和查询过程:代码#include<iostream>using namespace std;const int N=1e5+10;int tree[N*31][2];int idx,p;void insert(int x){ p=0; for(int i=30;~i;i--){//这里是30的原因是因为限制从0到30,我们采用高位优先,这样可以从大值直接判原创 2020-07-27 17:10:07 · 210 阅读 · 0 评论 -
[Acwing]836. 合并集合
算法标签 并查集题目简叙思路并查集:1.将两个集合合并2.查询两个元素是否在同一个元素当中基本原理:每个集合用一颗树来表示,树根的编号就是当前集合的编号。每个节点存储它的父节点,p[x]表示x的父节点问题1;:如何判断树根:if(p[x]==x)这里非常重要的是:我们从一开始把所有p[x]=x了,这样一来,就可以用p[x]==x来判断是否是一个树的根节点问题2:如何求X的集合编号:while(p[x]!=x)x=p[x];如果不是根节点,就一直指向下一个,直到指向根节点为止问题3:如原创 2020-07-27 15:06:57 · 283 阅读 · 0 评论 -
[AcWing]835. Trie字符串统计
算法标签 Trie,字典树题目简叙思路多叉树存储字符串利用公共前缀提高效率如图,参照代码看:思路不知道怎么写,都贴代码上了代码#include<iostream>#include<string>using namespace std;const int N = 2*1e4+10;int tree[N][26];//多叉树,N表示总数,26表示子节点共有26个字母多个,值存储idx int cnt[N];//记录对应字符的出现的次数int idx;/原创 2020-07-26 20:57:00 · 228 阅读 · 0 评论 -
[Acwing]154. 滑动窗口
算法标签 单调栈 滑动窗口题目简叙思路模拟队列 利用单调队列的思路来控制队列放的是原本字符串的下标查询最小值每次检查数值是否小于队尾元素,如果是,则循环删去队尾,直到新元素比前一个元素更大这样我们就营造了一个递增的单调序列,最小值永远是队头然后返回队头即可代码#include<iostream>#include<vector>using namespace std;int n,k,tmp;const int N=1e6+10;int a[N];i原创 2020-07-26 15:56:55 · 218 阅读 · 0 评论 -
[AcWing]830. 单调栈
算法标签:单调栈题目简叙思路单调栈的概念是栈内所有数据都是单调递增或者递减这里我们只需要构造一个单调递增的栈,然后反复查看栈顶,此时的栈顶元素必然为栈内最大元素,如果栈顶比目标值大,就弹出该元素,直至栈顶元素比目标值小这样我们栈内的元素必然是单调递增的这样我们就可以获得左边第一个比它小的数代码#include<iostream>using namespace std;const int N = 1e5+10;int stk[N],tt;int main(){原创 2020-07-23 21:45:00 · 215 阅读 · 0 评论 -
[AcWing] 829. 模拟队列
算法标签 队列题目简叙思路后进先出的原则我们用 st,ed两个变量表示队列的对头和队尾push queue[++ed]=tmpn;插入时,队尾开始移动并添加数据pop start++;弹出队头数据时,我们用指针略过当前数据表示弹出于是队头++,这样我们就不会扫描到队头元素,相当于弹出empty cout<<queue[start]<<endl;直接查询队头元素query cout<<(start>ed?"YES":"NO")&原创 2020-07-23 21:00:11 · 194 阅读 · 0 评论 -
[Acwing]828. 模拟栈
算法标签 栈题目简叙思路push stk[++tt]=tmpN; pop tt--;query cout<<stk[tt]<<endl;empty if(tt>0)cout<<"NO"; else cout<<"YES";代码数组模拟#include<iostream>#include<string.h>using namespace std;const int N = 100000+原创 2020-07-23 20:21:35 · 176 阅读 · 0 评论 -
折半查找
查找分类(1)顺序查找(2)折半查找(1)顺序查找思路:将所要查询的数据和已经存在的所有数据进行依次比对,如果相同则找到(2)折半查找提前:必须是对有序(升序还是降序)的数据进行查询。否则不能进行折半查找!【灵魂所在】思路:对有序的数值,求中间值,判断这个中间是否是所要查询的对象,如果是则输出,如果不是所要查找的对象则立即比较大小如果中间值小于查找值,则继续再右边进行查找如果中间值大于查找值,则继续再左边进行查找一直重复下去。【明显能体现出 分治法的思路】举例说明假设找8原创 2020-07-20 17:40:21 · 405 阅读 · 0 评论 -
[图论]Prim算法求最小生成树
算法标签 prim题目来源题目简介思路prim1.把所有距离初始化为正无穷2.找到集合外距离最近的点t, 在联通块中的点3.用t来更新其他点到集合的距离4.把t加到集合中去1.初始化 正无穷2.因为集合没有任何点,我们随便找一个点接入集合3.用t 更新其他点到集合的距离即 其他点到t的距离,否则就继续是INF4.t 放入集合 我们已经使其变绿 放入第二次迭代2.选中剩下距离到集合最近的点3.用t 更新其他点到集合的距离但这里,我们的各个点的最近距离更新之后也并没发生原创 2020-06-15 18:19:14 · 294 阅读 · 0 评论 -
[计蒜客][质数]蒜头君的猜想
算法标签数学知识、质数、打表来源计蒜客2020蓝桥杯习题题目简介思路显然我们要找的是满足条件的所有可能性现在我们回到如何去找a+b=c中的ab即我们可以发现特性 a+b=c,a=c-b那么我们可以让a=1到a=n同时b=c-a来查找可能性,每获得一种可能就+1做法1.for (a :1 to n) && b = c - aif(a+b==c&&a...原创 2020-05-02 18:45:10 · 239 阅读 · 0 评论 -
[数学知识][质数]试除法判定质数
题目简介给定n个正整数ai,判定每个数是否是质数。算法标签数学知识、质数、试除法输入格式第一行包含整数n。接下来n行,每行包含一个正整数ai。输出格式共n行,其中第 i 行输出第 i 个正整数ai是否为质数,是则输出“Yes”,否则输出“No”。数据范围1≤n≤100,1≤ai≤2∗109输入样例:226输出样例:YesNo思路质数的定义是 如果一个数字只能...原创 2020-05-02 17:19:32 · 615 阅读 · 0 评论 -
[模板题][排序]堆排序
来源: 模板题算法标签:堆排序,堆题目描述输入一个长度为n的整数数列,从小到大输出前m小的数。输入格式第一行包含整数n和m。第二行包含n个整数,表示整数数列。输出格式共一行,包含m个整数,表示整数数列中前m小的数。数据范围1≤m≤n≤105,1≤数列中元素≤109输入样例:5 34 5 1 3 2输出样例:1 2 3堆堆的基本操作1.插入一个数字2.求集合中...原创 2020-05-02 16:05:48 · 319 阅读 · 0 评论 -
[模板题][bfs]八数码
来源:模板题算法标签:bfs题目描述:在一个3×3的网格中,1~8这8个数字和一个“x”恰好不重不漏地分布在这3×3的网格中。例如:1 2 3x 4 67 5 8在游戏过程中,可以把“x”与其上、下、左、右四个方向之一的数字交换(如果存在)。我们的目的是通过交换,使得网格变为如下排列(称为正确排列):1 2 34 5 67 8 x例如,示例中图形就可以通过让“x”先后与右...原创 2020-04-23 23:22:10 · 165 阅读 · 0 评论 -
[模板题][双指针]数组元素的目标和
来源:模板题算法标签:双指针题目描述:给定两个升序排序的有序数组A和B,以及一个目标值x。数组下标从0开始。请你求出满足A[i] + B[j] = x的数对(i, j)。数据保证有唯一解。输入格式第一行包含三个整数n,m,x,分别表示A的长度,B的长度以及目标值x。第二行包含n个整数,表示数组A。第三行包含m个整数,表示数组B。输出格式共一行,包含两个整数 i 和 j。数据...原创 2020-04-23 16:45:25 · 263 阅读 · 0 评论 -
[模板题][双指针]最长连续不重复子序列
来源:模板题算法标签:双指针题目描述:给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续区间,输出它的长度。输入格式第一行包含整数n。第二行包含n个整数(均在0~100000范围内),表示整数序列。输出格式共一行,包含一个整数,表示最长的不包含重复数字的连续子序列的长度。数据范围1≤n≤100000输入样例:51 2 2 3 5输出样例:3注意朴素: ...原创 2020-04-23 16:18:47 · 223 阅读 · 0 评论 -
[模板题]高精度除法
来源:模板题算法标签:高精度题目描述:给定两个非负整数A,B,请你计算 A / B的商和余数。输入格式共两行,第一行包含整数A,第二行包含整数B。输出格式共两行,第一行输出所求的商,第二行输出所求余数。数据范围1≤A的长度≤100000,1≤B≤10000B 一定不为0输入样例:72输出样例:31注意1≤A的长度≤100000,1≤B≤10000B 一定不...原创 2020-04-23 01:22:04 · 311 阅读 · 0 评论 -
[模板题]高精度乘法
来源:模板题算法标签:高精度题目描述:给定两个正整数A和B,请你计算A * B的值。输入格式共两行,第一行包含整数A,第二行包含整数B。输出格式共一行,包含A * B的值。数据范围1≤A的长度≤100000,1≤B≤10000输入样例:23输出样例:6注意乘数A 1≤A的长度≤100000,乘数B 1≤B≤10000思路模仿手工乘法a[n-1]a[n-2]...原创 2020-04-23 00:31:05 · 400 阅读 · 0 评论 -
[模板题]高精度减法
来源:模板题算法标签:高精度题目描述:给定两个正整数,计算它们的差,计算结果可能为负数。输入格式共两行,每行包含一个整数。输出格式共一行,包含所求的差。数据范围1≤整数长度≤105输入样例:3211输出样例:21难度: 简单思路模拟手动计算两个正整数的减法if bi>ai ai+=10 ai-1-=132 21a[1]a[2]a[1]b[2]b...原创 2020-04-22 23:14:58 · 304 阅读 · 0 评论 -
[模板题]高精度加法
来源:模板题算法标签:高精度题目描述:给定两个正整数,计算它们的和。输入格式共两行,每行包含一个整数。输出格式共一行,包含所求的和。数据范围1≤整数长度≤100000输入样例:1223输出样例:35注意len(a)<=10^6len(b)<=10^6思路1.字符串存储A,B2.逆序读写,模仿手动加法运算3.t为进位,t+a[i]+b[i],即添...原创 2020-04-21 23:20:26 · 299 阅读 · 0 评论 -
[模板题]第K个数
来源:模板题算法标签:快排,快速选择题目描述:思路快排模板,找K时注意递归代码#include<iostream>using namespace std;const int N=1E5+10;int a[N];int quick_sort_k(int a[],int l,int r,int k){ if(l==r)return a[l]; ...原创 2020-04-21 21:55:49 · 231 阅读 · 0 评论 -
[模板题]二进制中1的个数
来源:模板题算法标签:位运算题目描述:给定一个长度为n的数列,请你求出数列中每个数的二进制表示中1的个数。输入格式第一行包含整数n。第二行包含n个整数,表示整个数列。输出格式共一行,包含n个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中1的个数。数据范围1≤n≤100000,0≤数列中元素的值≤109输入样例:51 2 3 4 5输出样例:1 1 2...原创 2020-04-20 23:25:29 · 334 阅读 · 0 评论 -
[模板题]快速排序
来源:模板题算法标签:分治,快速排序题目描述:785. 快速排序给定你一个长度为n的整数数列。请你使用快速排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第一行包含整数 n。第二行包含 n 个整数(所有整数均在1~109范围内),表示整个数列。输出格式输出共一行,包含 n 个整数,表示排好序的数列。数据范围1≤n≤100000输入样例:...原创 2020-04-20 22:51:56 · 648 阅读 · 0 评论 -
[模板题]排列数字
题目来源 模板题算法标签 dfs题目描述给定一个整数n,将数字1~n排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。输入格式共一行,包含一个整数n。输出格式按字典序输出所有排列方案,每个方案占一行。数据范围1≤n≤7输入样例:3输出样例:1 2 31 3 22 1 32 3 13 1 23 2 1思路题目代码#include&...原创 2020-04-09 21:21:10 · 230 阅读 · 0 评论 -
[模板题]n-皇后问题
题目来源 模板题算法标签 dfs,剪枝题目描述n-皇后问题是指将 n 个皇后放在 n∗n 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。现在给定整数n,请你输出所有的满足条件的棋子摆法。输入格式共一行,包含整数n。输出格式每个解决方案占n行,每行输出一个长度为n的字符串,用来表示完整的棋盘状态。其中”.”表示某一个位置的方格状态为...原创 2020-04-09 18:58:10 · 333 阅读 · 0 评论 -
[信息学奥赛一本通]红与黑
算法标签 DFS,Flood Fill来源: 《信息学奥赛一本通》题目描述有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻(上下左右四个方向)的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。输入格式输入包括多个数据集合。每个数据集合的第一行是两个整数 W 和 H,分别表示 x 方向和 y 方向瓷砖的数量。在接下来...原创 2020-03-20 15:27:50 · 184 阅读 · 0 评论 -
[信息学奥赛一本通]献给阿尔吉侬的花束
献给阿尔吉侬的花束算法标签:BFS来源: 《信息学奥赛一本通》题目描述阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫。今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点,就在终点放了一块阿尔吉侬最喜欢的奶酪。现在研究员们想知道,如果阿尔吉侬足够聪明,它最少需要多少时间就能吃到奶酪。迷宫用一个 R×C 的字符矩阵来表示。字符 S 表示阿尔吉侬所在的位...原创 2020-03-18 21:42:47 · 248 阅读 · 0 评论 -
[模板题][信息学奥赛一本通]动态求连续区间和
动态求连续区间和题目来源 《信息学奥赛一本通》,模板题题目描述给定 n 个数组成的一个数列,规定有两种操作,一是修改某个元素,二是求子数列 [a,b] 的连续和。输入格式第一行包含两个整数 n 和 m,分别表示数的个数和操作次数。第二行包含 n 个整数,表示完整数列。接下来 m 行,每行包含三个整数 k,a,b (k=0,表示求子数列[a,b]的和;k=1,表示第 a 个数加 b)。...原创 2020-03-16 17:27:58 · 239 阅读 · 0 评论 -
[模板题]差分矩阵
来源: 模板题算法标签: 差分#### 题目描述输入一个n行m列的整数矩阵,再输入q个操作,每个操作包含五个整数x1, y1, x2, y2, c,其中(x1, y1)和(x2, y2)表示一个子矩阵的左上角坐标和右下角坐标。每个操作都要将选中的子矩阵中的每个元素的值加上c。请你将进行完所有操作后的矩阵输出。输入格式第一行包含整数n,m,q。接下来n行,每行包含m个整数,表示整数矩...原创 2020-03-15 17:06:04 · 291 阅读 · 0 评论 -
[模板题][Hulu面试题]差分
来源: 模板题, Hulu面试题算法标签:差分题目描述输入一个长度为n的整数序列。接下来输入m个操作,每个操作包含三个整数l, r, c,表示将序列中[l, r]之间的每个数加上c。请你输出进行完所有操作后的序列。输入格式第一行包含两个整数n和m。第二行包含n个整数,表示整数序列。接下来m行,每行包含三个整数l,r,c,表示一个操作。输出格式共一行,包含n个整数,表示最终序列...原创 2020-03-15 00:56:59 · 192 阅读 · 0 评论 -
[模板题逆序对的数量
逆序对的数量来源 模板题题目描述给定一个长度为n的整数数列,请你计算数列中的逆序对的数量。逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i < j 且 a[i] > a[j],则其为一个逆序对;否则不是。输入格式第一行包含整数n,表示数列的长度。第二行包含 n 个整数,表示整个数列。输出格式输出一个整数,表示逆序对的个数。数据范围1≤n≤100...原创 2020-03-14 23:20:54 · 417 阅读 · 0 评论 -
[模板题]归并排序
来源: 模板题,AcWing算法标签:归并排序题目描述给定你一个长度为n的整数数列。请你使用归并排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第一行包含整数 n。第二行包含 n 个整数(所有整数均在1~109范围内),表示整个数列。输出格式输出共一行,包含 n 个整数,表示排好序的数列。数据范围1≤n≤100000输入样例:53 ...原创 2020-03-14 22:23:38 · 380 阅读 · 0 评论 -
[模板题]日期合法
来源: 模板提算法标签:日期题目描述 判断日期是否合法cpp代码bool check(int date){ int year=date/10000,month=date%10000/100,day=date%100; if(month>12||!month||!date)return false; else if(month!=2&&day&...原创 2020-03-13 18:54:41 · 166 阅读 · 0 评论 -
[模板题]单链表
来源: 模板题算法标签 链表题目描述实现一个单链表,链表初始为空,支持三种操作:(1) 向链表头插入一个数;(2) 删除第k个插入的数后面的数;(3) 在第k个插入的数后插入一个数现在要对该链表进行M次操作,进行完所有操作后,从头到尾输出整个链表。注意:题目中第k个插入的数并不是指当前链表的第k个数。例如操作过程中一共插入了n个数,则按照插入的时间顺序,这n个数依次为:第1个插入的...原创 2020-03-13 17:25:59 · 206 阅读 · 0 评论 -
[模板题]最长上升子序列
来源: 模板题算法题:动态规划,线性DP,最长上升子序列给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。#### 输入格式第一行包含整数N。第二行包含N个整数,表示完整序列。#### 输出格式输出一个整数,表示最大长度。#### 数据范围1≤N≤1000,−1e9≤数列中的数≤1e9#### 输入样例:73 1 2 1 8 5 6#### 输出样...原创 2020-03-12 23:08:25 · 457 阅读 · 0 评论