![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
PAT甲级
白速龙王的回眸
一命二运三风水
四积功德五读书
六名七相八敬神
九交贵人十养生
展开
-
Pat甲级——2022六月夏季题透露 + 思路分享(result:90 感觉是卡了py的模拟)
两个人说昨天、今天、明天的日期两个人仅有一个说对求今天的日期优先队列?哈希记录位置?TLE了两个点。。所有点都遍历-》set如果遍历的点并不能够由前一个点连成边那么必定是因为上一个点的所有后继都已经遍历过了 否则不合法完全树 + preOrder -》还原树结构bfs层次遍历然后根据完全数的树序数的关系可以找到每个节点的父亲从而还原整个路径即可.........原创 2022-06-06 00:04:38 · 233 阅读 · 0 评论 -
【2022年520pat钻石争霸赛】随缘玩玩
前言一个小时有点紧,两个wa后面也没有优化了把代码贴上来纪念一下。。。第四第八有wa但是不能再调试我也懒得优化了。。。题目and解答n = input()print(n + '! 520!')n, m, k = list(map(int, input().split()))total = n * kif total == m: print("zheng hao mei ren " + str(k) + "!")elif total > m: print(原创 2022-05-21 12:24:17 · 234 阅读 · 0 评论 -
pat甲级总结:基于快排思想找到vector的前k大的数
快排:找left right,然后随机出一个idx放在left中然后遍历ij双指针,找到不符合的并交换最后把left和i交换最后判断i的位置是否满足输出后k个即可//// Created by 009 on 2022/3/6.//#include<bits/stdc++.h>using namespace std;int findKthLargest(vector<int>& nums, int k) { int n=nums.size();原创 2022-03-06 21:24:58 · 221 阅读 · 0 评论 -
PAT甲级——1167 Cartesian Tree (30 分)(buildTree + 层次遍历)
思路:读入in序列然后根据in序列,buildTree,逻辑就是找到min的index,左边就是左子树,右边就是右子树(跟知道p + i)差不多最后queue遍历src:#include<bits/stdc++.h>using namespace std;// Cartesaion Tree 最小就是根,找到最小左右就是左右子树struct node { int val; node* left; node* right;};// 存一下inor..原创 2022-02-28 10:15:38 · 228 阅读 · 0 评论 -
PAT甲级——1166 Summit (25 分)
思路:模拟,用两位vector表示edge相连关系然后,看是否两两相连和是否有其他点与其都相连src// 不需要并查#include<bits/stdc++.h>using namespace std;vector<vector<int>> edge(250, vector<int>(250, 0));int main() { int n, m; cin >> n >> m; for(int.原创 2022-02-20 18:53:03 · 577 阅读 · 0 评论 -
PAT甲级——1165 Block Reversing (25 分)
题目:按一定的长度整体翻转思路:定义node然后模拟就好src:#include<bits/stdc++.h>using namespace std;struct node { int val, next;}nodeList[100010];int main() { int start, n, k; cin >> start >> n >> k; for(int i = 0; i < n; i++).原创 2022-02-15 19:25:10 · 448 阅读 · 0 评论 -
PAT甲级——1164 Good in C (20 分)
题目给出A-Z的形状和一个句子,输出矩阵形式的分词句子思路三维数组存每个字母然后再拼接起来坑点空格也有可能是seperator用getchar()+getline()获得整行src:#include<bits/stdc++.h>using namespace std;//每个英文字母都是7 * 5的一个matrixchar word[26][7][5];int main() { for(int i = 0; i < 26; i++) { .原创 2022-02-14 21:05:47 · 451 阅读 · 0 评论 -
pat甲级:1163 Dijkstra Sequence (30 分)
思路:判断是不是dijk序列需要考虑重复的最小的dist用一个vector存着,其他步骤和dijk相同即可一旦发现下一个选的不在vector中就直接返回no即可src:// 相等的时候有多种取法, 逐一判断#include<bits/stdc++.h>using namespace std;int inf = 0x7f7f7f7f;int edge[1100][1100];int dist[1100];bool visit[1100];int main() {..原创 2022-02-06 18:10:41 · 915 阅读 · 2 评论 -
pat甲级:1162 Postfix Expression (25 分)
思路:后续遍历dfs,除了常规的先左右后根处理根处理:1.叶子节点 or 2.左右都有孩子的处理外特别注意:无左孩子 + 有右孩子的处理src:#include<bits/stdc++.h>using namespace std;// 左右根struct node { string data; int left = -1; int right = -1;}nodeList[25];// postTraversalstring postTr..原创 2022-02-04 12:16:31 · 887 阅读 · 0 评论 -
pat甲级——1161 Merging Linked Lists (25 分)(bug大作战)
模拟:1.用vector记录长和短的2.然后三个三个一组,交替输出3.短vector输完之后全部长vector代码:#include<bits/stdc++.h>using namespace std;struct node { int val; int next;}nodeList[100000];int main() { int s1, s2, n; cin >> s1 >> s2 >> n; ..原创 2022-01-27 10:25:01 · 916 阅读 · 0 评论 -
pat甲级:1160 Forever (20 分)
思路:1.必定结尾是9,否则必定会互质2.遍历用res记录,res记得更新代码:#include<bits/stdc++.h>using namespace std;// 要确保都是正数int gcd(int x, int y) { if(y == 0) return x; else if(x == 0) return y; else if(x >= y) return gcd(y, x % y); else gcd(x, y % x);..原创 2022-01-26 00:01:13 · 925 阅读 · 0 评论 -
PAT甲级——1159 Structure of a Binary Tree (30 分)(这可能是二叉树大保健)
二叉树大保健原创 2022-01-17 20:30:37 · 696 阅读 · 4 评论 -
PAT甲级——1158 Telefraud Detection (25 分)
思路:1.用二维vector存2.判断条件,然后用并查集分类3.注意并查集的写法代码:#include<bits/stdc++.h>using namespace std;// 35,36 int father[1111];int findFather(int x) { int a = x; // 找到最小的father while(father[a] != a) a = father[a]; // 第二个坑点,忘了更新整条.原创 2022-01-17 10:19:25 · 795 阅读 · 0 评论 -
pat甲级——1157 Anniversary (25 分)
代码:#include<bits/stdc++.h>using namespace std;struct people { string id, birthday;};bool cmp(people a, people b) { return a.birthday < b.birthday;}int main() { int n; cin >> n; unordered_map<string, int>..原创 2022-01-15 23:22:20 · 293 阅读 · 0 评论 -
PAT甲级156——Sexy Primes
#include<bits/stdc++.h>using namespace std;bool isPrime(int x) { if(x <= 1) return false; //if(x == 2) return true; for(int i = 2; i <= sqrt(x); i++) { if (x % i == 0) return false; } return true;}.原创 2022-01-15 19:16:28 · 108 阅读 · 0 评论 -
pat甲级乙级辅导
浙大研究生师兄 pat甲级乙级辅导原创 2022-01-08 21:49:40 · 478 阅读 · 0 评论 -
PAT甲级155道题博客完结撒花——心路历程记录
It took me lots of hard-working and patience to finish these PAT blogs.I need to thank myself for promoting my coding skills day after day.作为一个非科班出生的学生,虽然学过一些c++和数据结构,但大部分都只停留在应试阶段,几个大作业也都是简简单单的增删改查询,实际上并没有起到练习coding的作用。从19年年底开始一刷pat甲级,好像是刷到第三道就遇到了dijks原创 2021-08-29 21:20:27 · 199 阅读 · 3 评论 -
细节处理之输出格式+特殊情况+正负区分类型的处理(用提取首位指示)——PAT (Advanced Level) 1139 First Contact (30 分)
题目概述:a喜欢b(可能是同性),必须找到a的朋友c和b的朋友d,其中cd互为朋友进行传递信息题目分析:1.输出格式4个digit %04d2.当ab同性时,c不能等于b且d不能等于b3.-0000难以处理24分做法://坑点排查#include<bits/stdc++.h>using namespace std;vector<vector<int>> v(10000);unordered_map<int, int> mp;str.原创 2021-08-29 20:51:35 · 705 阅读 · 0 评论 -
跳出深层嵌套——PAT (Advanced Level) 1138 Postorder Traversal (25 分)
题目概述:一道简单的pre + in->post,输出post[0]题目分析:难点是时间,如何跳出深层嵌套22分解法:#include<bits/stdc++.h>using namespace std;vector<int> pre, in, post;bool flag = false;void getpost(int prel, int prer, int inl, int inr){ if(prel > prer) return;.原创 2021-08-29 17:45:53 · 136 阅读 · 0 评论 -
结构体+排序+选合格的+round四舍五入——PAT (Advanced Level) 1137 Final Grading (25 分)
题目概述:记录各个学生的成绩,然后鉴别出符合输出条件的学生,然后排序,最后输出题目分析:要用四舍五入的round完整代码://结构体+排序#include<bits/stdc++.h>using namespace std;struct student{ string id; int gp = -1, gmid = -1, gfinal = -1, g;};bool cmp(student a, student b){ if(a.g !=...原创 2021-08-29 16:48:26 · 194 阅读 · 0 评论 -
回文数计算and判断——PAT (Advanced Level) 1136 A Delayed Palindrome (20 分)
题目概述:判断一个str是否回文数,否则则reverse相加再判断,最多十次题目分析:1.judge判断回文数2.cal计算新回文数,用string + jingwei模拟(因为1000位)3.十次循环后退出完整代码:#include<bits/stdc++.h>using namespace std;bool judge(string str){ int len = str.size(); for(int i = 0; i <= len /..原创 2021-08-29 15:08:43 · 105 阅读 · 0 评论 -
红黑树判断——PAT (Advanced Level) 1135 Is It A Red-Black Tree (30 分)
题目概述:给出一颗红黑树的pre序列,判断是否为红黑树题目分析:1.首先红黑树是bst,按pre进行build得到的结果就是原树2.build的话采用root = build(root,x),若root为空则插值,否则判断x和root->val的绝对值进行递归插值3.建好树后,由于123条件好判断,就不用单独写函数了4.对于条件4,特殊情况null返回true;若一个节点为红,但儿子节点也存在红则返回false;否则递归左右儿子进行判断5.对于条件5,等价于所有节点的左右子树的黑色高..原创 2021-08-29 14:30:30 · 182 阅读 · 0 评论 -
判断vertex cover——PAT (Advanced Level) 1134 Vertex Cover (25 分)
题目概述:判断一个点集,是否满足每条边都至少有一个端点在里面题目分析:1.用edge记录边的两个端点2.用map记录点集中是否有某个点3.判断edge中的两个端点是否满足至少其一在map中完整代码://vertex cover就是图中的任意一条边的两个顶点必有其一在集合中//用一个map记录集合中的点,然后逐条边检验两个端点只需其一在map中即可#include<bits/stdc++.h>using namespace std;struct edge{ i..原创 2021-08-28 15:07:22 · 62 阅读 · 0 评论 -
链表重排——PAT (Advanced Level) 1133 Splitting A Linked List (25 分)
题目概述:将已有链表按既定顺序分为三类,并按序输出题目分析:先分成v1 v2 v3,再合成vnew输出完整代码://分三个part#include<bits/stdc++.h>using namespace std;struct node{ int val, next = -1;}nodelist[100010];int start, n, k;int main(){ cin >> start >> n >>..原创 2021-08-28 13:56:14 · 108 阅读 · 0 评论 -
简单字符串 and 特殊情况判断——PAT (Advanced Level) 1132 Cut Integer (20 分)
题目概述:判断一个数,能否为该数前半部分与后半部分的积的倍数坑点:注意0的处理完整代码:#include<bits/stdc++.h>using namespace std;int main(){ int n; cin >> n; for(int i = 0; i < n; i++) { string temp; cin >> temp; int len = tem..原创 2021-08-28 13:36:18 · 104 阅读 · 0 评论 -
在地铁中找出最短的线路——PAT (Advanced Level) 1131 Subway Map (30 分)
题目概述:找出最近的地铁路径,且中转次数最少,并输出每条线的方案我的解法:bfs + 中转次数计算判断path由于过于冗杂,就不描述了#include<bits/stdc++.h>using namespace std;struct node{ //1代表属于几条线 //2代表邻居节点 int num1 = 0, num2 = 0; vector<int> v1, v2;}nodelist[10010];struc...原创 2021-08-28 13:26:13 · 183 阅读 · 0 评论 -
略有变化的中序输出——PAT (Advanced Level) 1130 Infix Expression (25 分)
题目分析:输出中序表达式,中间过程要加括号,最外层无需括号题目分析:1.先看看中序输出的结果2.在dfs中的一头一尾对非叶子节点输出括号3.最终结果减去括号完整代码:#include<bits/stdc++.h>using namespace std;struct node{ string data; int l, r;}nodelist[30];string res = "";void dfs(int root){ if(n...原创 2021-08-27 17:02:25 · 125 阅读 · 3 评论 -
set内部排序可以,无脑sort超时——PAT (Advanced Level) 1129 Recommendation System (25 分)
题目概述:输出在此之前出现最多的k个无脑sort#include<bits/stdc++.h>using namespace std;struct node{ int itemid, num = 0;};bool cmp(node a, node b){ if(a.num != b.num) return a.num > b.num; else return a.itemid < b.itemid;}map<int, in..原创 2021-08-27 13:16:23 · 200 阅读 · 0 评论 -
map应用——PAT (Advanced Level) 1128 N Queens Puzzle (20 分)
题目概述:若全部棋子不同行、列、对角输出yes,反之no题目分析:用两个map记录行和对角信息,若重复则no完整代码://不在同一行、同一列、同一斜线#include<bits/stdc++.h>using namespace std;int main(){ int k; cin >> k; for(int i = 0; i < k; i++) { int n; cin >> n..原创 2021-08-26 12:55:41 · 97 阅读 · 0 评论 -
建树+奇异遍历——PAT (Advanced Level) 1127 ZigZagging on a Tree (30 分)
题目概述:根据post和in建树,然后zigzagging输出层次遍历题目分析:1.buildtree函数:四参数+返回node*2.若postl > postr返回NULL;建立node *root = new node(),然后给root->val赋值根值,然后root->left = buildtree左子树;右子树同理;最后返回root即可3.zigzag输出,用flag标记,反向的时候利用stack实现完整代码:#include<bits/stdc++.h..原创 2021-08-25 22:26:22 · 148 阅读 · 0 评论 -
联通分量dfs + 度数——PAT (Advanced Level) 1126 Eulerian Path (25 分)
题目概述:输出每个点的度数,并判断欧拉图题目分析:1.用visit和dfs求联通分量cnt2.若cnt不为1则直接non欧拉3.若cnt为1且odd = 0欧拉4.若cnt为1且odd = 2半欧拉5.其余情况non 欧拉完整代码://哈密顿来过了//欧拉当然也要来//统计度数而已//connected graph的判断#include<bits/stdc++.h>using namespace std;vector<int> res;bool .原创 2021-08-25 19:27:31 · 120 阅读 · 0 评论 -
数学问题全靠猜——PAT (Advanced Level) 1125 Chain the Ropes (25 分)
题目概述:数列中两两取平均,直到最后一个,求max题目分析:肯定是排序,从小到大和从大到都试试,结果发现从小到大就是答案完整代码://两数之平均//这个就排序把hhh//code题无需证明#include<bits/stdc++.h>using namespace std;int main(){ int n; cin >> n; vector<double> v(n); for(int i = 0; i <..原创 2021-08-25 18:22:35 · 96 阅读 · 1 评论 -
avl + bfs + dfs——PAT (Advanced Level) 1123 Is It a Complete AVL Tree (30 分)
题目概述:建立一颗avl的bst,然后层次输出并判断是否为complete tree题目分析:1.avl建立:对ll型右旋,rr型左旋,lr型左右旋,rl型右左旋,getheight高度函数,insert插入函数2.insert函数:若root为NULL,建立new node 并赋值val 以及left和right置为NULL;若x小于root -> val,插入加调整;反之同理3.关键语句root = insert(root, x),返回插入root后的root指针4.用queue...原创 2021-08-25 17:09:15 · 108 阅读 · 1 评论 -
跳着选获奖者(不重复)——PAT (Advanced Level) 1124 Raffle for Weibo Followers (20 分)
题目概述:按一定的间隔选获奖者,且每人最多出现一次题目分析:1.s大于m直接keep going2.用while判断,s表示当前位置,若未被输出过,则输出且s += n;反之则s += 13.用mp记录是否被输出过完整代码:#include<bits/stdc++.h>using namespace std;int m, n, s;vector<string> v;map<string, int> mp;int main(){ ...原创 2021-08-24 23:26:29 · 132 阅读 · 1 评论 -
判断哈密顿回路——PAT (Advanced Level) 1122 Hamiltonian Cycle (25 分)
题目分析:1.回路总共经过n+1个点2.头尾相等3.每一条路联通4.起点经过两次,其余点经过1次完整代码://哈密尔回路就是从Vi出发走完所有其他的Vj然后回到Vi#include<bits/stdc++.h>using namespace std;int n, m;int e[250][250];bool visit[250];int main(){ cin >> n >> m; for(int i = 0; i &..原创 2021-08-24 19:52:22 · 631 阅读 · 0 评论 -
map应用——PAT (Advanced Level) 1121 Damn Single (25 分)
题目概述:将舞会中没有伴侣的人找出来题目分析:1.用map1记录伴侣彼此之间的映射2.用map2记录是否在舞会3.判断在舞会中的每个人的伴侣是否在舞会即可完整代码://用map1记录它的couple//用map2记录某人在不在舞会#include<bits/stdc++.h>using namespace std;int main(){ map<int, int> mp1; map<int, int> mp2; in..原创 2021-08-24 19:18:30 · 111 阅读 · 1 评论 -
set应用——PAT (Advanced Level) 1120 Friend Numbers (20 分)
题目概述:找出各数字和相同的不同和个数,以及从小到大输出各数字和题目分析:getsum函数以及用set存储即可完整代码:#include<bits/stdc++.h>using namespace std;int getsum(int x){ int sum = 0; while(x != 0) { int temp = x % 10; sum += temp; x /= 10; } re.原创 2021-08-24 18:16:04 · 60 阅读 · 1 评论 -
如何根据pre和post确认in呢?——PAT (Advanced Level) 1119 Pre- and Post-order Traversals (30 分)
题目概述:给出pre和post,问能不能确认in,若不能给出一种可能的情况题目分析:1.通常知道pre、post、in中的两个我们通过一个get+四个参数(2left+2right)的函数,可以搞出剩下的一个序列2.pre和post的标志位是post的倒数第二个(也就是右子树的根,我们认为),然后在在pre中找到i使得pre[i] = post[postright - 1],如果i = preleft + 1我们就没辙了,它就不唯一,因为我们无法分辨这是左子树还是右子树3.若i > pr..原创 2021-08-24 14:39:25 · 449 阅读 · 0 评论 -
并查集查不同树上的鸟——PAT (Advanced Level) 1118 Birds in Forest (25 分)
题目概述:给出若干张照片,同一张照片的鸟在一棵树,求树可能的最大树以及鸟树;以及判断任意两鸟是否在一棵树题目分析:并查集就好了,终极爸爸选id最小的完整代码://并查集:一旦在同一张照片,就是一颗树#include<bits/stdc++.h>using namespace std;int father[11000];bool visit[11000];int find(int x){ while(x != father[x]) x = father[x]..原创 2021-08-24 13:09:26 · 107 阅读 · 0 评论 -
简单统计——PAT (Advanced Level) 1117 Eddington Number (25 分)
题目概述:找出最大的E s.t. 有E天跑E公里以上(不包括E)题目分析:从n往下遍历,求出运动公里i的天数cnt(i),当cnt(i)》=i时,i就是答案按完整代码:#include<bits/stdc++.h>using namespace std;int main(){ int n; cin >> n; vector<int> v; v.resize(n); for(int i = 0; i < n;.原创 2021-08-24 12:38:21 · 120 阅读 · 0 评论