自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 五种最短路算思路及其代码实现【全】

刚看完Acwing上面y总的最短路视频,过来写一篇博客总结一下,也希望能帮助到别人 先上一张图,刚用这个画图软件,可能画的比较拙劣 根据图片我们可以知道,最短路问题分为单源最短路和多源最短路。 单源最短路:只有一个出发点。求出来的应该是一个一维数组,保存该点到各点最短距离 多源最短路:有多个出发...

2020-02-24 09:30:52

阅读数 46

评论数 0

原创 单调栈【完整思路+代码】

看到这道题,首先我们会想到的肯定是暴力模拟。外层循环i是每个数,内层循环j是从i-1到最开头,找第一个比i小的数。这样做的话,如果数据是10的5次方,那么双重循环时间是非常可怕的。 然后我们来分析一下上面这个思路,看看有哪里可以优化。因为找的肯定是比他小且最接近的数,那么如果第2个数比第一个数小,...

2020-02-23 10:24:20

阅读数 19

评论数 0

原创 数组模拟双链表【头插,尾插,中插,删除】

#include <iostream> #include <algorithm> using namespace std; const int N = 100010; int e[N], l[N], r[N], idx; void init() { r[0]...

2020-02-23 09:55:03

阅读数 3

评论数 0

原创 数组模拟单链表【头插,中插,删除】

代码如下: #include<bits/stdc++.h> using namespace std; const int maxn=100010; int head,e[maxn],ne[maxn],idx,m; void add(int x) { e[idx]=x; ne[idx...

2020-02-23 09:51:15

阅读数 8

评论数 0

原创 马的遍历【洛谷】

常规BFS,可能唯一不同的就是方向不只是常规的上下左右,不过也好控制方向,具体看下面代码把。 #include<bits/stdc++.h> using namespace std; struct xy { int x,y; }node,Top; const int dx[4]={1...

2020-02-21 09:22:02

阅读数 16

评论数 0

原创 约瑟夫问题【洛谷】

约瑟夫环有很多种解法,这里我提供一种数据结构,用队列来模拟。直接采用了STL里面队列的模板,看下面代码之前,跟我默念,STL大法好!!哈哈哈。 大致思路:先把所有人都放进队列里面,然后从1开始出队,1出队再进队,这样1就从队首到了队尾,就这么一直循环,如果到了第m个就只出队不让他进队。这样队列里面...

2020-02-21 09:13:43

阅读数 15

评论数 0

原创 队列安排【洛谷】

思路:这个就是一道模拟二叉树的题。反正我是这么理解的。 首先建立一个结构体数组,包含左孩子,右孩子,以及一个变量用来标记后面他是否被删除了。 然后就是插入的时候先判断p(根据题目),判断完p之后还要判断k的左右孩子。 举个栗子:比如说i为2,k为3,p为1.那么现在2要往3的右边插队,你就首先要判...

2020-02-21 09:02:01

阅读数 14

评论数 0

原创 二进制中1的个数【三种解法】

#include<bits/stdc++.h> using namespace std; int cnt(int b) { int res=0; while(b>0) { b=b&(b-1); res++; } return res; } int mai...

2020-02-20 16:46:34

阅读数 11

评论数 0

原创 最长连续不重复子序列

#include<bits/stdc++.h> using namespace std; int n,a[100010],s[100010],res; int main() { cin>>n; for(int i=0;i<n;i++) cin>>a[i...

2020-02-20 16:33:12

阅读数 9

评论数 0

原创 L2-014 列车调度 (25分)【17行极短代码】

#include<bits/stdc++.h> using namespace std; int n,x; set<int>s; int main() { cin>>n>>x; s.insert(x); while(--n) { cin&...

2020-02-20 09:45:59

阅读数 12

评论数 0

原创 L2-013 红色警报 (25分)

#include<bits/stdc++.h> using namespace std; const int maxn=5050; int n,m,k,a,b,c,cnt1,cnt2,f[maxn],vis[maxn]; struct xy{int x,y;}node[maxn]; i...

2020-02-20 09:39:13

阅读数 10

评论数 0

原创 L2-011 玩转二叉树 (25分)

#include<bits/stdc++.h> using namespace std; int n,cnt; vector<int>in,pre,level(1000000,-1); void levelorder(int root,int start,int end,i...

2020-02-19 17:35:13

阅读数 13

评论数 0

原创 L2-008 最长对称子串 (25分)【20行极短代码】

#include<bits/stdc++.h> using namespace std; int main() { string s; getline(cin,s); string cnt="#"; int len=s.size(); for(int i=...

2020-02-19 17:19:26

阅读数 13

评论数 0

原创 L2-006 树的遍历 (25分)【极简代码】

#include<bits/stdc++.h> using namespace std; int n,cnt; vector<int>in,post,level(1000000,-1); void levelorder(int root,int start,int end,...

2020-02-19 15:49:54

阅读数 15

评论数 0

原创 L2-005 集合相似度 (25分)(极短代码 STL)

STL大法好!!! 大致思路如下:建立一个外核vector内核set的二维数组。然后每个set就代表着一个集合。接收数据后,比如查集合A和集合B,首先让nc=0,nt=B的大小。然后遍历A中数在B中找(用到find函数)如果能找到说明是共有的就nc++,没找到说明在并集中让nt++;代码如下: #...

2020-02-19 15:34:55

阅读数 9

评论数 0

原创 最长上升子序列【线性DP】

#include<bits/stdc++.h> using namespace std; int n,m,f[1010][1010]; char a[1010],b[1010]; int main() { cin>>n>>m; cin>>a+1&...

2020-02-16 16:17:56

阅读数 11

评论数 0

原创 最长上升子序列【线性DP】

在这里插入代码片 #include<bits/stdc++.h> using namespace std; const int maxn=10010; int n,a[maxn],f[maxn]; int main() { cin>>n; for(int i=1;i&l...

2020-02-16 16:12:44

阅读数 12

评论数 0

原创 数字三角形【线性DP】

#include<bits/stdc++.h> using namespace std; const int N=510,inf=1e9; int f[N][N],a[N][N],n; int main() { cin>>n; for(int i=1;i<=n;i...

2020-02-16 16:07:48

阅读数 13

评论数 0

原创 P1449 后缀表达式【洛谷】

#include<bits/stdc++.h> using namespace std; stack<int>s; int t,x,y; char ch; int main() { while(ch!='@') { ch=getchar(); ...

2020-02-14 16:53:34

阅读数 15

评论数 0

原创 P1605 迷宫【洛谷】

#include<bits/stdc++.h> using namespace std; int sx,sy,ex,ey,tx,ty,n,m,t,g[6][6],ans; int dx[]={0,1,-1,0,0}; int dy[]={0,0,0,1,-1}; void DFS(in...

2020-02-13 15:21:44

阅读数 11

评论数 0

原创 P1101 单词方阵【洛谷】

#include<bits/stdc++.h> using namespace std; int n; int u[]={0,1,1,1,-1,-1,-1,0,0}; int v[]={0,0,-1,1,0,1,-1,1,-1}; bool ma[101][101]; char le[...

2020-02-13 15:08:57

阅读数 9

评论数 0

原创 P1019 单词接龙【洛谷】

#include<bits/stdc++.h> using namespace std; const int maxn=100; int n,ans,used[maxn]; string word[maxn],beginn; bool check(string s,string m,i...

2020-02-13 09:04:48

阅读数 19

评论数 0

原创 八皇后【洛谷】

#include<bits/stdc++.h> using namespace std; int a[1000],b[1000],c[1000],d[1000],n,s; void print() { s++; for(int i=1;i<=n;i++) cout<&l...

2020-02-13 08:45:05

阅读数 11

评论数 0

原创 L2-026 小字辈 (25分)(DFS思路+极短代码)

首先建立一个二维动态数组,存储每个编号的孩子。建立一个一维数组用来记录每个编号的是第几代 根据这个二维数组也能直接找到根结点的编号,然后从根节点开始深搜就可以了。代码如下: #include<bits/stdc++.h> using namespace std; const int m...

2020-02-12 10:05:03

阅读数 44

评论数 0

原创 L2-020 功夫传人 (25分)(双解法 完整思路+极短代码)

首先捋一下题,给了一个初始值,然后没传一代就减少一点,如果是得到者就让他获得的功力乘以倍数,最后求得到者功力总和。那么也就是说我们需要找两个东西:1.得到者 2.得到者是第几代。 思路一:建立一个二维动态数组,然后在输入的时候横坐标代表这个人的编号,这一行就存储它的徒弟的编号。如果是得到者的话就...

2020-02-11 18:18:59

阅读数 24

评论数 0

原创 7-98 汉密尔顿回路 (25分)

#include<bits/stdc++.h> using namespace std; int n,m,k,g[210][210]; bool vis[210]; int main() { cin>>n>>m; for(int i=0;i<m;i++...

2020-02-11 17:20:03

阅读数 11

评论数 0

原创 7-105 串的模式匹配 (25分)(strstr的应用 )

看网上题解大部分都是用的KMP,个人比较懒,看到这个题感觉依稀记得有一个函数可以用来找子串。 strstr(s,t)函数,在s串中找子串t,如果没找到返回false,如果找到就返回剩下部分。 正好和该题题意完美契合,事实证明掌握一些函数关键时刻有奇效,代码如下: #include<bits/...

2020-02-11 15:06:05

阅读数 17

评论数 0

原创 7-67 任务调度的合理性 (25分)(拓扑排序+极简代码)

#include<bits/stdc++.h> using namespace std; const int maxn=110; vector<int>g[maxn]; int n,in[maxn],k,x,cnt; queue<int>q; void topS...

2020-02-09 17:59:15

阅读数 15

评论数 0

原创 7-66 哥尼斯堡的“七桥问题” (25分)(极简代码)

写在前面:虽然这就是一个典型的DFS板子题,但是讲道理,这道题还是比较坑的。因为题目上没有说欧拉回路是不能有奇数顶点的(当然,这确实是欧拉回路的性质,但是这对没学好离散的人很不公平啊),如果不考虑这个情况样例二就会输出1.。代码如下: #include<bits/stdc++.h> u...

2020-02-09 17:27:12

阅读数 20

评论数 0

原创 7-65 笛卡尔树 (25分)(非常规做法+完整思路+极简代码)

写在前面:看到这个题,感觉并不难。算是模板题。不过翻看了一下网上的题解,基本上全是常规的建立一个二叉搜索树,建立一个小顶堆(也可以用优先队列)。然后分别遍历判断。当然,我比较懒,就没去建树建堆。 思路:首先建立结构体数组来存储每个节点的k1,k2,左右孩子编号。然后在接受数据的时候,用一个前驱数组...

2020-02-09 17:21:59

阅读数 26

评论数 0

原创 7-64 修理牧场 (25分)(完整思路+极短代码stl)

写在前面:不得不说,这道题是真的真的真的很有趣,有的时候刷题刷着刷着突然能写一道有趣的题让自己眼前一亮,确实不错! 思路:首先我们想,一整块木板,怎么切比较合适。如果一块30长的木头 第一次切了29和1 花费30 第二次又切了28和1 花费29 或者 第一次切了15和15 花费30 第二次又切了...

2020-02-09 15:16:07

阅读数 14

评论数 0

原创 7-43 哈利·波特的考试 (25分)(完整思路+极短代码)

说来惭愧,刚开始没理解清楚题目意思,以为是连通图求最小生成树。。。。 好,我们来分析一下这道题,每个动物都可以用咒语变成另一个动物,首先我们可以没两条动物直接的咒语当作是两地之间的距离保存起来。然后就是多源最短路(什么?你问为什么是多源,因为你不知道那个起点最短,求得就是最短的)。多源最短路用Fl...

2020-02-07 15:54:39

阅读数 17

评论数 0

原创 7-41 列出连通集 (25分)(BFS+DFS)

简单说一下,这道题就是基础的BFS+DFS两次搜索。 不过相较于搜索的模板题,这道题还是要求你掌握搜索的过程和原理,BFS还好说,如果不是一个联通集的话,那他肯定不是一所有点都连在一起的,就再进行BFS,DFS也一样。代码如下: #include<bits/stdc++.h> usin...

2020-02-07 09:09:41

阅读数 12

评论数 0

原创 7-39 堆中的路径 (25分)(模板+代码)

如果会建立堆的话,这应该就是个板子题了。 不会建堆的话,推荐看一下我的这篇文章,模板积累一些对自己刷题用处是很大的 【数据结构】堆的常规操作(建堆,删除,插入) 代码如下: #include<bits/stdc++.h> using namespace std; int n,m,x,a...

2020-02-06 20:45:16

阅读数 16

评论数 0

原创 7-37 是否同一棵二叉搜索树 (25分)(极短代码)

这道题如果你会建立二叉搜索树的话应该就没什么问题了,比较的话就是从上到下依次比较看是否相等,比较简单。代码如下: #include<bits/stdc++.h> using namespace std; const int maxn=1024+7; int n,m,a[maxn],b[...

2020-02-06 20:20:02

阅读数 12

评论数 0

原创 7-36 Tree Traversals Again (25分)(分析+完整思路+极短代码)

分析:刚开始做这道题的时候一头雾水,只看出来样例这个出栈序列是中序遍历,我寻思着根据中序遍历求后序遍历吗?后来看了一下网上别人的思路才明白少考虑了个东西。仔细观察可以发现push的数是图中这个树的前序遍历,而pop的数是图中这个树的中序遍历的序列。也就是说进栈序列为前序遍历序列,出栈序列是中序遍历...

2020-02-06 19:33:17

阅读数 23

评论数 0

原创 7-35 List Leaves (25分)(思路+极短代码)

分析:这是一道算是比较基础的数据结构体。建树+搜索。 思路:建立一个结构体数组来存储每个结点的值还有它左右孩子的下标。然后输入的时候用一个pre数组来存储各节点之间的关系,用来找到这颗树的根节点。然后就是BFS搜索,如果搜到某个结点两个孩子值都为-1就输出就行,代码如下: #include<...

2020-02-06 17:38:22

阅读数 44

评论数 0

原创 7-34 树的同构 (25分)(思路+代码 递归实现)

思路:这道题让判断两个树是否同构,那么我们首先要建立出来这两颗树,然后用一个数组pre来存储各节点之间的关系,然后找出这两颗树的根节点。做到这里,基本就已经完成了,接下来就是判断。这里用到了递归判断,判断过程大致如下(具体可结合代码): 1.先判断两颗树是否为空,如果都是空树,肯定一样,如果一个为...

2020-02-06 17:33:48

阅读数 32

评论数 0

原创 7-33 Pop Sequence (25分)(完整模拟思路+极短代码)

这道题就是判断合法出栈序列。大致思路如下: 因为已知入栈顺序为1,2,3,4,,,n。所以首先建立一个栈用来模拟进栈,然后建立一个一维数组用来存储每次输入的出栈序列。然后进栈的时候如果栈顶与当前一维数组的数相等,就把栈顶删除,一维数组当前的下标+1,以此类推,如果不相等,就再入栈(此时如果入栈后栈...

2020-02-06 09:11:28

阅读数 9

评论数 0

原创 7-32 Reversing Linked List (25分)(思路+最后一个测试点+极简代码)

思路:首先用结构体数组来接受输入的数据。然后从begin开始将这个链表从前到后还原,存到一个动态数组中。然后开始翻转,注意翻转的是**[i,i+k)** 左闭右开区间。而reverse函数正好是左开右闭区间。最后再遍历输出就可以。 注意:可能给的结点有的不在链表上,这时就不用管不在链表上的点了,不...

2020-02-05 21:08:02

阅读数 15

评论数 0

提示
确定要删除当前文章?
取消 删除