自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 [编译原理]first和follow集合C++代码实现

前言最近在学习微机原理,里面涉及到编译优化的问题,又去重新看了看龙书的语法分析部分。之前学习的时候只是知道first和follow集合怎么计算,但是没有很明白背后的原理。想起轮子哥的一句话:要理解一个东西最好的办法就是实现它。所以就心血来潮,写了C++的实现代码思路什么的就不说了,都写在代码的注释里面。#include<string>#include<iostream>#include<vector>#include <map>#include

2021-05-23 20:46:04 4757 1

原创 PAT甲级 2020冬季赛总结

PAT甲级 2020冬季赛总结刚刚结束了PAT甲级冬季赛。最后以54分的成绩“惨淡收尾”。。其中感想颇多,因此来写个博客记录一下。由于本次考试和秋季考试一样,都是线上举办的。所以需要开启摄像头,双机位进行监考。虽然我事先已经反复阅读过这个考场准则,已经监考规则,顺便在家里面反复模拟过考试环境,但最后还是没想到发生了意外意外大概开始考试的25分钟后,突然我发现自己电脑的网络断了(因为是用手机开着热点在考试的。家里WIFI信号不稳定)。然后这个时候我没有办法,只能拿起手机看看到底是怎么回事。然后发现上面

2020-12-05 20:42:01 1288 4

原创 PAT-A 1141题解

代码算法的具体过程体现在代码中了。由于本人喜欢写比较长但是清晰易懂的代码,所以各位看官看个乐乎就行#include<vector>#include<iostream>#include<string>#include<algorithm>#include<unordered_map>#include<set>#include<cstring>using namespace std;//结构体,用于存放最后的

2020-12-02 14:13:21 95

原创 PAT-A 1134 题解

PAT-A 1134 题解思路分析:这道题其实还是比较简单的,毕竟没有让我们求最小VC(如果要求这个就。。。巨麻烦好吧,模板都要背死你)。题目的意思是给定一个集合,让我们看看这个集合中的点是不是出现在所有的边里面。如果我们以边作为研究对象来建立图,那么做法也比较暴力。每一次查找,遍历所有的边,然后看看这个边里面的结点是不是出现在给定的集合中。由于给定的集合数量大小不确定,可能和n一样大。那么,这样算法的时间复杂度为O(nm)。题目中虽然给定了n,m<10^4,但是处理10 ^8的数据一定会超时

2020-12-01 14:07:42 98

原创 PAT-A 1139

不完全ac代码 #include<iostream> #include<cstdio> #include<vector> #include<algorithm> #include<unordered_map> #include<string> #include<cstring> using namespace std; const int MAX_N = 10001; unordered_map<i

2020-12-01 11:13:37 135

原创 PAT-A 1142

层次结构代码:#include<iostream>#include<cstdio>#include<vector>using namespace std;const int MAX_N = 210;int matrix[MAX_N][MAX_N];int n,m,t;bool is_clique(const vector<int> &list){ if(list.size() <= 1) return true;

2020-11-30 23:30:08 58

原创 PAT-A1119 题解

PAT-A 1119 题解题意分析这道题要求我们通过后序遍历和先序遍历的顺序还原一颗二叉树,同时把它的中序遍历顺序打印出来。当然还必须判断,这样的二叉树是否是唯一的。算法分析本题的核心就在于还原出这个二叉树。首先我们得明白,什么情况下,我们不能还原出一颗唯一的二叉树?答案就是,如果在先序遍历的序列中发发现,根节点后面的左右儿子结点只有一个,这个时候我们并不知道它到底是左儿子还是右儿子,所以产生了歧义。为了消除这个歧义,我们就直接假设它是左儿子。消除歧义的同时,给这个二叉树打上标记。AC代码#

2020-11-27 13:48:04 222

原创 PAT-A 1127题解

PAT-A 1127题解题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805349394006016题意分析给定后序遍历和中序遍历的序列,要求非正常层序遍历的输出(先左后右边,再右边往左边,接着从左往右…………以此类推)算法分析这道题要解决两个问题:怎么把这个二叉树构建出来怎么交替的按照从右往左和从左往右层序遍历。首先这个构建二叉树的算法和平时我们用到的差不了太多。代码如下:node* creat

2020-11-26 19:28:51 74

原创 PAT-A 1138 题解(两种解法)

PAT-A 1138 题解题意分析:给出一个树的先序遍历和中序遍历,要求后序遍历输出的第一个数。考察要点对于后续遍历过程的认识算法分析这道题和后面所有的树的题基本上类似,只需要求局部解,所以我们不需要构建出整个树。只需要利用先序遍历和中序遍历的性质就能把这一个解求出来。首先分析一下后续遍历的第一个数是怎么输出的:从根节点开始,不断地分别往左子树和右子树递归。当到达叶子结点的时候输出。而且这个点一定是唯一的。也就是说,存在一条从根节点通往这个节点的唯一路径。我们换一种思路。这个路径应该是这样

2020-11-25 18:53:52 178

原创 PAT-A 1143 LCA

PAT-A 1143 LCA题意分析这道题和1151其实基本上差不多,不需要去建立实际的二叉树。详细的思路分析过程可以参考柳神的博客:柳婼AC代码#include<unordered_map>#include<cstdio>#include<iostream>using namespace std;unordered_map<int,int> pos_mapping;const int MAX_N = 10010;int pre[MAX_

2020-11-25 16:39:33 69

原创 PAT-A 1147 Heaps

PAT-A 1147 Heaps题意:给定一个完全二叉树序列,判断该完全二叉树是否是是堆(大顶堆或小顶堆),最后输出完全二叉树的后序遍历。代码:#include<cstdio>#include<string>#include<iostream>using namespace std;const int MAX_N = 1010;int tree[2*MAX_N];//用于存放完全二叉树int T,n;//0表示属于大顶堆,1表示属于小顶堆,2表示不

2020-11-25 15:40:24 111

原创 PAT-A1151题解

PAT-A1151题解还是一样,贴出自己的垃圾代码#include<iostream>#include<vector>#include<unordered_map>using namespace std;const int MAX_N = 10010;int n,m;int preorder[MAX_N],inorder[MAX_N];//建立静态二叉树struct tree_node{ int parent,lchild,rchild;}

2020-11-25 13:16:18 96

原创 PATA1152 题解

PATA1152 题解题意分析:给定一个数字字符串(我都不知道这个L输入有什么用。。。),在字符串中任意选取一个长度为k的字串,判断它是否为可能的素数。如果有,请输出第一个这样的字串;若没有,输出404注意的点:这里要注意,这道题需要把0给输出,所以遇到0我们不能直接continue,而是要更新字符串,然后再进行筛选。代码:#include<iostream>#include<string>#include<cstdio>#include<cmat

2020-11-24 20:11:17 105

原创 PAT-A 1153 Decode Registration Card of PAT 题解

PAT-A 1153 Decode Registration Card of PAT 题解之前自己写的傻逼代码:(为了节省大家的时间,大家可以不用看了,纯粹为了记录自己的傻逼行为)#include<iostream>#include<string>#include<cstring>#include<set>#include<algorithm>#include<vector>#include<unordered_

2020-11-24 17:28:30 125

原创 PAT-A 1154 题解

PAT-A 1154 题解题目链接:pat-A1154题意分析这道题乍看很复杂, 实际上非常简单。题目给出一个图,之后给出k种方案,每一种方案都在对应的点上面涂颜色,如果有一个边连接了两个相同颜色的顶点,那么就说明这不是一个能够清晰的分别不同点之间区别的地图。如果所有的边都满足连接了两个不同颜色的点,那么就返回k-coloring,k表示有几种颜色。算法分析由于这道题是以边作为研究对象,加上结点数量有10000,如果用二维矩阵一方面没有必要,另一方面肯定MLE,所以我们这道题用edge为最小单元

2020-11-24 10:40:01 118

原创 PAT-A 1155 题解

PAT-A 1155 题解题目链接:Heap Path题意分析:首先不要上来就被这道题的Heap吓到了。这道题不需要你去手写一个Heap(更何况还有priority_queue这样现成的轮子)。这道题本质上在考察搜索和完全二叉树的性质。虽然这是个30分的题,但是感觉难度完全比不上前面的那一题。题目的意思就是给你一个完全二叉树的层序遍历,让你判断这个完全二叉树是不是堆。顺便输出一下每次遍历到根节点的路径。算法分析这个路径的输出和我们平常接触的树的遍历有所不同。它要你输出的是从根节点出发到每一个叶子

2020-11-24 10:29:50 88

原创 PAT-A1131 Subway Map 题解

PAT-A1131 Subway Map 题解首先感谢柳神的博客,看了她的博客发现自己的问题。柳神的博客题目链接:PATA1131题目大意:给你一张地铁地图,然后给你m和查询记录,每次查询,都要给出从S->T的最短路线。如果有相同的最短路线,那么就给出最后换成次数最小的那一个。思路分析:很多人看到这道题会想到用单源最短路的算法去解。但是这里有一些条件:给出的站点编号不是顺序出现的(当然可以用离散化的方法来处理,所以这一点似乎也可以克服)最后需要求解路径,并且这个路径并非传统意义上

2020-11-22 16:49:37 178

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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