PAT A 模块总结
MaxLeo928
随缘记录
展开
-
PAT A 备考实用小模块集合
1、素数 素数判断函数和获取素数表的写法。(二者是独立的,选择使用) bool is_prime(int x){ //素数判断 if(x==0||x=1) return false; int k=(int)sqrt(x*1.0); for(int i=2;i<=K;i++){ if(x%i==0) return false; } return true; } //素数筛(埃氏筛法) int P[MaxN]={0};//0代表为素数,1代表为负数 vector<in原创 2021-09-09 21:57:26 · 267 阅读 · 0 评论 -
PAT A 主要数据结构知识点实用模块模板
目录 1、二叉树 2、并查集 3、贪心算法 4、最短路径 5、拓扑排序 6、关键路径 还有Hash、DFS、BFS(考察不多,使用队列) 还是更多应结合题目练习使用,考察比较灵活 整理总结不易,希望大家顺手给个赞和关注,谢谢大家!!! 附上常用的小模块集合 常用STL容器总结(待更新) ...原创 2021-09-10 12:09:10 · 205 阅读 · 0 评论 -
PAT备考之 关键路径 专题
虽然到目前为止,关键路径没有考过,但是近年之前没考过的拓扑排序和Floyd算法都有考,故稍微了解准备一下关键路径。 在关键路径之前,有个最长路径的求法,在没有正环的图中,边权全部取相反数,使用Bellman-Ford算法即可。 而对于关键路径问题(有向无环图),除了动态规划的解法,比较常规的是使用拓扑排序。 具体过程:在拓扑排序的基础之上,进行一次正向拓扑和一次逆向拓扑,用ve[]数组和vl[]数组来更新每个事件最早和最晚的时间。 我还是按照自己习惯使用结构体数组和邻接矩阵记录点与点,还有边的情况。原创 2021-09-09 21:01:31 · 244 阅读 · 0 评论 -
PAT备考之 最短路径 专题
PAT A中30分答题常考题 1、Dijkstra算法+DFS(重点) (无负边权)单源最短路径问题万能通法,可以回溯路径,选取多条件最优路径 以在最短路径前提下的最小花费问题为例(其余条件根据题目变通) 在主函数中直接 Dijkstra(start); DFS(end);即可,path记录的就是有约束下的最短路径 int G[maxN][maxN]; //记录两点间距离 int C[maxN][maxN]; //记录两点间花费 int start; //记录起点 int d[ma..原创 2021-09-09 17:10:56 · 191 阅读 · 0 评论 -
PAT备考之 拓扑排序 专题
拓扑排序可以用于 1、有前提条件的事件是否可以进行的判断 2、有向无环图的判断 下面是我自己比较习惯的写法。(TIP:如果题目条件中有说,当有多个事件可以进行时,优先进行序号小的,那么就可以把queue<int> q 换为priority_queque<int> q,即可直接实现) //顶点数为N struct node{ int inD; vector<int> next; }Node[N]; //在主函数中存储好结点间关系 bool tpsort()原创 2021-09-09 15:31:14 · 157 阅读 · 0 评论 -
PAT备考之 贪心算法 专题
贪心主要有两种问题,分为简单贪心和区间贪心 1、简单贪心 比较好理解和思考;例如已有些单个数字怎样组合最大;出售固定量商品,怎样组合最赚钱。 2、区间贪心 (1)在一个大的区间内,尽量放入给出的小区间,要求两两不相交,一般求能放入多少个区间,ans即为放入区间数。 struct inteval{ int x,y; }; bool cmp(const inteval a,const inteval b){ if(a.y!=b.y) return a.y>b.y; ret...原创 2021-09-09 15:14:14 · 210 阅读 · 0 评论 -
PAT备考之 并查集 专题
对于并查集,记住三个模块即可 看到并查集题目,直接二话不说,按顺序三个模块一写,直接用。 1、father[N]数组 int father[N]; 数值初始化: //写在main函数里 for(int i=0;i<n;i++){ father[i]=i; } 2、findfather(x)函数(带路径压缩,可以缩短查找时间) int findfather(int x){ if(father[x]==x){ return x; }else{ int F=findfath原创 2021-09-09 12:35:46 · 141 阅读 · 0 评论 -
PAT备考之 二叉树 专题
二叉树的考题能不建树就不建树,建树也用静态比较简单 1、序列转换 作为核心考点树里的核心,需要非常熟练理解掌握树序列的转化(不建树)。做题时有一个思想是,有了包含中序的两个序列,树就有了,其余问题都可在序列上进行。 理解是关键,不要死记硬背。 vector<int> pre,in,post,le[N] (记录前序、中序、后序、层序) (1)已知前序中序(pre(N),in(N)),转后序(记录层序) void trail(int r...原创 2021-09-09 12:15:33 · 201 阅读 · 0 评论