PAT小记
文章平均质量分 57
记录刷题时遇到的生词、思路、题解、技巧。
weixin_44744335
在下小学生码云
展开
-
PAT《算法笔记》入门篇(2)算法初步-排序散列递归贪心二分等
排序A1025问题:思路:关键:#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int N,K;const int maxn = 30010;struct stu{ char id[15]; int score,final_rank,local_number,local_rank;};stu a[maxn];bool cmp(stu a,stu原创 2021-03-07 11:34:45 · 237 阅读 · 0 评论 -
vector的sort与优先队列priority_queue
vector的sort属于小根堆。而priority_queue默认是大根堆,因此在struct内部重载<要注意方向。#include<cstdio>#include<vector>#include<queue>#include<algorithm>using namespace std;struct edge{ int weight; int u,v; edge(int a,int b,int c):weight(c),u(a),v原创 2021-03-07 11:29:09 · 192 阅读 · 0 评论 -
PAT-第5章-入门篇(3)
分数的四则运算通用模板#include<cstdio>#include<algorithm>using namespace std;struct Fraction{ ll up,down;};Fraction reduction(Fraction result){ if(result.up<0){ result.up*=-1; result.down*=-1 } if(result.up==0){ result.down=1; }else{原创 2021-03-07 11:28:48 · 204 阅读 · 0 评论 -
PAT《算法笔记》第三章-入门篇(1)-入门模拟
进制转换A102710进行转13进行,并将10转换为‘A’#include<cstdio>using namespace std;int main(){ int r,z[10]={0},num = 0,a[3]; for(int i=0;i<3;i++) scanf("%d",&a[i]); printf("#"); for(int i=0;i<3;i++){ num = 0; r = a[i]; if(r==0){ printf("0原创 2021-03-07 11:28:10 · 129 阅读 · 0 评论 -
PAT甲级生词
List item原创 2021-03-07 11:27:54 · 66 阅读 · 0 评论 -
PAT-图与动规
参考资料:《算法笔记》、柳神csdn博客原创 2021-03-07 11:25:39 · 128 阅读 · 0 评论 -
2021-03-05 PAT第一次模拟 范围【1120-1123】
感悟:前两题我在40分钟内解决了,但实际上如果仔细一些可以在半小时内完成。第三题是判断哈密顿环的问题,有一定的知识背景要求,当然学过图论的应该都知道一些的。一开始我还觉得按照PAT的尿性,可能给的无向图的信息都是有迷惑性的,比如可能会有一些孤立点?但是实际上是没有的。只要了解到环的特性:环长为点数+1,以及头尾是一样的。以及哈密顿的特性:所有点都经过。那么只剩下一个样例过不了了。对于最后一个样例,我们还需要判断题目给出的这个path上那些相邻点是不是连通的,需要根据前面给出的图来进行判断,如果中原创 2021-03-05 22:40:17 · 62 阅读 · 0 评论 -
PAT《算法笔记》 提高篇(1)栈、队列、链表
栈A1051#include<cstdio>#include<vector>#include<stack>using namespace std;int main(){ int M,N,K,m,cnt; vector<int> v; scanf("%d%d%d",&M,&N,&K); for(int i=0;i<K;i++){ v.clear(); sta原创 2021-03-05 16:52:44 · 76 阅读 · 1 评论 -
用栈实现简单表达式的计算
对于一个表达式,比如:1+2*3我们分两步走,第一步 将中缀表达式转换为后缀表达式这里我们需要用到栈和队列。栈用来临时存放操作符,队列用来保存后缀表达式。同时,我们还需要一个结构体node来同时表示操作数和操作符。struct node{ double num; char op; bool flag;};stack<node> s;queue<node> q;如果遇到操作数,我们就将其入队列;如果遇到操作符,我们需要比较其与栈顶操作符的优先级,当当前操作符原创 2021-03-05 10:04:45 · 427 阅读 · 1 评论 -
PAT-A1119 Pre- and Post-order Traversals
问题:根据一个树的先序序列和后序序列判断这棵树是否唯一。首先,为什么会不唯一?看上面两个图,它们的先序序列:a b后序序列:b a是一样的,因为b既可以在左边也可以在右边 !因此我们只需要判断根结点(递归意义上的“根”)下面有一个结点还是两个结点就可以了,如果只有一个结点,那么这棵树显然不唯一 !如果根结点有两个子节点,那么左子节点和右子节点根据先序序列显然是可以分清的(先左后右)参考柳神代码理解后一次ac,思路和柳神的要反一下(故意的hh),但是原理是一样的。#include<原创 2021-03-04 11:25:03 · 87 阅读 · 2 评论 -
PAT A1139 First Contact 快乐模拟【review】
问题:一个人要向另一个人表白,如果他们是异性,那么这个人会先找一个同性中间人,这个同性中间人再找另一个表白目标的同性中间人,最后这个中间人找到表白目标。如果是同性,那么中间就经过两个同性中间人。思路:模拟关键:1.存在0000或-0000这种更加特殊的情况2.不存在1024和-1024同时存在的情况,即不同考虑重名,一个人的性别是确定的。3.A在寻找同性朋友时,需要避免找到他想要的伴侣B,所以当当前朋友就是B或者B的同性朋友就是A时舍弃该结果4.建立同性朋友之间的表很重要。5.最后,四位数并原创 2021-02-22 13:06:50 · 114 阅读 · 0 评论 -
C++ vector与set互转
vector转set可以实现去重;set转vector可以方便自己实现排序(对于set貌似自己写的cmp不能用?不清楚 太菜了)vector<int> v;v = {1,2,2,3,3,4};//建立vectorset<int> st(v.begin(), v.end());//在构造函数中可以直接实现vector转setv.assign(st.begin(), st.end());//用assign实现set转vector在学习过程中涉及到的一些数据结构转换等问题.原创 2021-02-20 14:35:58 · 15970 阅读 · 3 评论 -
如何根据层序序列和中序序列建立一棵树
参考该博客最近复习了树方面的数据结构知识,在做题的过程中,我发现都是给先序(或者后序)与中序让求一棵树,没有碰到过给你层序和中序让求树的情况,故在此做一个整理以便于今后回顾复习。附有注释的代码:#include<cstdio>using namespace std;const int maxn = 110;int level[maxn],pos[maxn];//level存储层序序列,pos用于指示在中序序列中各个点的相对位置,下面会提到int N;struct node.原创 2021-02-19 20:26:10 · 381 阅读 · 0 评论 -
PAT-树与并查集
参考资料:《算法笔记》,柳神csdn博客PAT-A1020问题:给定后序和中序序列,要求给出层序序列。思路:根据后序和中序序列建树然后再层序遍历输出即可。关键:在建树过程中要考虑边界条件,即后序序列为空时if(preL>preR) return NULL 退出。PAT-A1053【hard】问题:给定一个每个结点都有权值的树并给定一个整数S,要求求出从根到叶子的路径上所有结点权值之和为这个整数S的所有这样的路径,并按照权值降序排列输出。思路:根据给定权值和信息建树,通过静态方式建树最.原创 2021-02-19 13:25:47 · 110 阅读 · 1 评论