![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
PAT
wujiekd
做你认为正确的事。https://wujiekd.github.io/zh-cn
展开
-
PAT甲级-大整数运算-1024 Palindromic Number解题思路
1024 Palindromic Number (25分)思路这里有三个非常大的坑,数组需要开大一点,不然装不下PAT还有个巨坑,输入就是满足条件,就判断完不需要计算了,牛客网即不存在这种问题大整数相加处理进位普遍存在的一个问题这三个问题在代码中均有体现。代码#include<bits/stdc++.h>using namespace std;int N;//还有一个坑,数组需要开的足够大int A[1005] = {0};int B[1005] = {0};原创 2021-04-19 00:13:10 · 93 阅读 · 0 评论 -
PAT甲级-大整数运算-1023 Have Fun with Numbers解题思路
1023 Have Fun with Numbers (20 分)思路大整数翻倍,利用字符串读入,存进数组翻倍即可代码#include<bits/stdc++.h>using namespace std;int A[25];int B[25]={0};int C[25]={0};int main(){ string s; bool flag = true; cin>>s; int len = s.size(); for(原创 2021-04-18 19:36:16 · 126 阅读 · 0 评论 -
PAT甲级-二叉查找树-1099 Build A Binary Search Tree解题思路
1099 Build A Binary Search Tree (30 分)思路给出树的关系,使用静态写法写好树然后给出一串数字,填进这颗二叉查找树,二叉查找树特点:中序遍历的数字顺序为升序,对数字排序好,利用中序遍历填进去,然后使用BFS输出层次遍历。代码#include<bits/stdc++.h>using namespace std;const int maxn = 110;struct node{ int data; int left,right;原创 2021-04-17 23:56:48 · 142 阅读 · 0 评论 -
PAT甲级-二叉查找树-1064 Complete Binary Search Tree解题思路
1064 Complete Binary Search Tree (30 分)思路完全查找二叉树的中序遍历是从小到大的;还有一个性质就是,完全二叉树的下标,可以用爸爸的下标表示,分别为2n,2n+1代码#include<bits/stdc++.h>using namespace std;int N;const int maxn = 1010;int Array[maxn];int CBT[maxn];int start = 0;//完全查找二叉树的中序遍历是从小到大的原创 2021-04-17 18:45:16 · 127 阅读 · 0 评论 -
PAT甲级-二叉查找树-1043 Is It a Binary Search Tree解题思路
1043 Is It a Binary Search Tree (25 分)思路构造二叉查找树需要不断插入,使用动态建树方法而比较序列,vector比较存储的序列更方便镜像二叉查找树 和 之前1102的二叉树的遍历类似,这次我们不需要重复构造,二叉树和二叉树的翻转的区别就是 原版的先序遍历为翻转版本的后序遍历的逆序,原版的后序遍历为翻转版本的先序遍历的逆序,原版的中序遍历为翻转版本的中序遍历的逆序。层序遍历,就是每一层的逆序,掌握这个方法,也可以输出翻转版本的对应序列。代码#include原创 2021-04-17 18:17:14 · 156 阅读 · 0 评论 -
PAT甲级-树的遍历-1053 Path of Equal Weight解题思路
1053 Path of Equal Weight (30 分)思路PAT还是很严谨的,有个sort的id写成了i,PAT一直有个测试点没过,但牛客网可以过,太坑了。。这里有个sort,对结构体的vector进行排序,非常妙,用到了node里面的权重值对vector排序代码#include<bits/stdc++.h>using namespace std;const int maxn = 110;struct node{ int weight; vecto原创 2021-04-16 20:26:25 · 201 阅读 · 0 评论 -
PAT甲级-树的遍历-1004 Counting Leaves解题思路
1004 Counting Leaves (30 分)思路数每一层的叶子结点,秒杀代码#include<bits/stdc++.h>using namespace std;const int maxn = 110;int N,K;vector<int> vec[maxn];int num[maxn]={0};int max_depth = 0;void DFS(int index ,int depth){ max_depth = max(max原创 2021-04-16 17:52:42 · 87 阅读 · 0 评论 -
PAT甲级-树的遍历-1106 Lowest Price in Supply Chain解题思路
1106 Lowest Price in Supply Chain (25 分)思路秒杀不解释代码#include<bits/stdc++.h>using namespace std;const int maxn = 100010;vector<int> Node[maxn];int N;double P,r;int min_depth = maxn;int min_num = 0;void DFS(int index ,int depth){原创 2021-04-16 15:16:36 · 114 阅读 · 2 评论 -
PAT甲级-树的遍历-1094 The Largest Generation解题思路
1094 The Largest Generation (25 分)思路统计哪一层的结点个数最多,也是用DFS搜索即可。测试点只输入一个结点,在树的题目中应该会经常出现~for(int i=1;i<=N;i++) //判断根结点的一个方法,i<N,使用N会报段错误,但i<=N则正确,说明存在只输入一个根结点的情况,小细节 if(!vecbool[i]) {root = i;}代码#include<bits/stdc++.h&g原创 2021-04-16 01:38:13 · 182 阅读 · 0 评论 -
PAT甲级-树的遍历-1079 Total Sales of Supply Chain解题思路
1079 Total Sales of Supply Chain (25 分)思路1090的升级版,当结点带有数据信息时,需额外补充一个data进行存储。代码#include<bits/stdc++.h>using namespace std;const int maxn = 100010;struct node{ int data; vector<int> child;}Node[maxn];int N;double P,r;doub原创 2021-04-15 22:34:57 · 91 阅读 · 0 评论 -
PAT甲级-树的遍历-1090 Highest Price in Supply Chain解题思路
1090 Highest Price in Supply Chain (25 分)思路树的构造,肯定要设计一个结点数组,记录他的儿子了,二叉树就两个就固定设置两个int记录下标即可;别的树的儿子不固定,所以就使用vector数组进行存储。这些都是树的静态写法,因为给定了每个每个结点的儿子们,如果没给,类似于二叉树那种重构二叉树就需要使用动态写法了。这里搜树最深几层用到了DFS算法。代码#include<bits/stdc++.h>using namespace std;con原创 2021-04-15 21:51:03 · 93 阅读 · 0 评论 -
PAT甲级-二叉树的遍历-1102 Invert a Binary Tree解题思路
1102 Invert a Binary Tree (25 分)思路翻转二叉树后序遍历翻转即可,由于给出每个结点的左右儿子,所以这里用到二叉树的静态写法更加方便代码#include<bits/stdc++.h>using namespace std;const int maxn = 30;struct node{ //二叉树的静态写法,更简单实现 int lchild,rchild;}Node[maxn];bool isRoot[maxn]={false}原创 2021-04-08 15:36:33 · 192 阅读 · 0 评论 -
PAT甲级-二叉树的遍历-1086 Tree Traversals Again解题思路
1086 Tree Traversals Again (25 分)思路题目还是有点抽象的获得先序和中序后,构造树,输出后序遍历代码#include<bits/stdc++.h>using namespace std;const int N = 50;int pre[N],in[N],post[N];int n;struct node{ int data; node* left; node* right;};node* create(int原创 2021-04-07 22:11:04 · 106 阅读 · 0 评论 -
PAT甲级-二叉树的遍历-1020 Tree Traversals解题思路
1020 Tree Traversals (25 分)思路由后序遍历、中序遍历先构造出整颗树,再得到层次遍历一定要两个遍历才可以得到整颗树,而且一定要有中序遍历(因为可以判断结点位于左子树、右子树),然后带上另一个遍历。构造树使用递归;先、中、后序遍历都是递归;层次遍历是BFS代码#include<bits/stdc++.h>using namespace std;const int maxn =50 ;int pre[maxn],in[maxn],post[maxn]原创 2021-04-07 17:01:27 · 162 阅读 · 0 评论 -
PAT甲级-链表处理-1097 Deduplication on a Linked List解题思路
1097 Deduplication on a Linked List (25 分)思路秒杀不解释代码#include <bits/stdc++.h>using namespace std;const int maxn = 100010 ;struct point{ int address,data,next; int rank,which;}pp[maxn];bool cmp(point a,point b){ if(a.which != b.原创 2021-03-16 12:11:53 · 111 阅读 · 0 评论 -
PAT甲级-链表处理-1133 Splitting A Linked List解题思路
1133 Splitting A Linked List (25 分)思路这类题结构体带有一个rank记录顺序,然后还要一个which对它们分组就可以了代码#include <bits/stdc++.h>using namespace std;const int maxn = 100010;struct point{ int address,data,next; int rank; int which;}PP[maxn];bool cmp(poi原创 2021-03-16 12:10:16 · 146 阅读 · 0 评论 -
PAT甲级-链表处理-1074 Reversing Linked List解题思路
1074 Reversing Linked List (25 分)思路链表好坑,每k个要翻转一次,样例明显没有啊而且还有游走的指针,不在链表内,需要统计合法链表内的指针个数细节,就是开链表大小的结构数组去作为链表地址去存储,然后按照顺序给予他们一个rank,这里的rank可以通过结构体rank给予 或 使用rank数组进行标定代码一(纯链表,加指针翻转)#include<bits/stdc++.h>using namespace std;const int maxn = 100原创 2021-03-15 14:56:25 · 190 阅读 · 3 评论 -
PAT甲级-BFS-1091 Acute Stroke解题思路
1091 Acute Stroke (30 分)思路BFS, 走迷宫必用~代码#include<bits/stdc++.h>using namespace std;struct node{ int x,y,z;}Node;int n,m,sl,T;int pixel[1290][130][61];bool inq[1290][130][61]={false};int X[6] = {0,0,0,0,1,-1};int Y[6] = {0,0,1,-1,原创 2021-03-13 10:51:24 · 92 阅读 · 0 评论 -
PAT甲级-DFS-1103 Integer Factorization解题思路
1103 Integer Factorization (30 分)思路DFS结合vector代码#include<bits/stdc++.h>using namespace std;int n,k,p,maxFacSum = -1;vector<int>fac,ans,temp;void init(){ int i =0,temp = 0; while(temp <= n) { fac.push_back(temp原创 2021-03-12 19:11:26 · 96 阅读 · 0 评论 -
PAT甲级-并查集-1107 Social Clusters解题思路
1107 Social Clusters (30 分)思路经典并查集int findFather(int x) //这里其实可以加入路径压缩就是构造找爸爸时的树更矮一点代码#include<bits/stdc++.h>using namespace std;const int N = 1010;int father[N]; //存放父亲结点int isRoot[N] ={0}; //记录每个结点是否作为某个集合的根结点int course[N] = {0}; //记录前原创 2021-03-12 11:56:35 · 107 阅读 · 0 评论 -
PAT甲级-栈模拟-1051 Pop Sequence解题思路
1051 Pop Sequence (25 分)思路栈的使用注:使用pop()和top()必须在确定stack长度不为0时,否则会出现段错误while(!ss.empty() && ss.top() == in[cur] )代码#include<bits/stdc++.h>using namespace std;stack<int>ss;int in[1005]={0};int main(){ int M,N,K; cin&g原创 2021-03-11 18:09:44 · 126 阅读 · 0 评论 -
PAT甲级-map映射、stl的使用-1071 Speech Patterns解题思路
1071 Speech Patterns (25 分)思路map继续秒杀代码#include<bits/stdc++.h>using namespace std;map<string,int>mm;int main(){ string str,s=""; getline(cin,str); int start = 0; str +=' '; while(start<str.length()) {原创 2021-03-11 15:14:00 · 92 阅读 · 2 评论 -
PAT甲级-map映射、stl的使用-1054 The Dominant Color解题思路
1054 The Dominant Color (20 分)思路map存就是好,STL都是动态调整,不会占用过多额外的空间数组连续空间,会浪费很多额外的空间代码#include<bits/stdc++.h>using namespace std;map<int,int>mm;int main(){int n,m;int num ;cin>>n>>m;for(int i =0;i<m;i++)for(int j=0;j<n原创 2021-03-11 14:24:28 · 77 阅读 · 0 评论 -
PAT甲级-map映射、stl的使用-1100 Mars Numbers解题思路
1100 Mars Numbers (20 分)思路打表数字映射字符串,用string数组可以字符串映射数字,用map代码#include<bits/stdc++.h>using namespace std;string unitDigit[13]={"tret","jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"};string tenDigdit[13] =原创 2021-03-11 13:57:14 · 89 阅读 · 0 评论 -
PAT甲级-集合set、stl的使用-1063 Set Similarity解题思路
1063 Set Similarity (25 分)思路set的各种用法,遍历需要使用迭代器set::iterator iter代码#include<bits/stdc++.h>using namespace std;const int N = 51;set<int> s[N];int main(){ int n; scanf("%d",&n); for(int i =0;i<n;i++) { in原创 2021-03-11 11:22:36 · 110 阅读 · 0 评论 -
PAT甲级-不定长vector、stl类型-1039 Course List for Student解题思路
1039 Course List for Student (25 分)思路重点就是不定长vector的使用,减少内存还有通过哈希表,将name转换为数字代码#include<bits/stdc++.h>using namespace std;const int N = 40010;const int M = 26*26*26*10+1;vector<int>selectcourse[M];int getID(char a[]){ int id =原创 2021-03-11 09:14:14 · 89 阅读 · 0 评论 -
PAT甲级-质因子分解类型-1059 Prime Factors解题思路
1059 Prime Factors (25 分)思路首先建立质数表,int大概在10的9次方内,开根号也就10的5次方,所以取10的5次方以内的质数即可,因为如果10的5次方内的数除不尽,除以10的5次方外面的数也不可能除尽,说明该数就是质数,直接输出即可,也可提前判断输出。代码#include<bits/stdc++.h>using namespace std;bool isPrime(int n){ if(n<=1)return false; int原创 2021-03-10 23:36:58 · 209 阅读 · 1 评论 -
PAT甲级-质因子分解类型-1096 Consecutive Factors解题思路
1096 Consecutive Factors (20 分)思路遍历一遍,然后每个衍生再遍历,判断是否可以整除即可代码#include<bits/stdc++.h>using namespace std;int main(){ long long N; cin>>N; long long sqr = (long long)sqrt(N); sqr = min(sqr+10, N); int len = 0; in原创 2021-03-10 22:32:01 · 118 阅读 · 0 评论 -
PAT甲级-质数类型-1078 Hashing解题思路
1078 Hashing (25 分)思路二次探查方法搜索方法乱定导致不能AC,要根据算法设置为哈希表大小Quadratic probing (with positive increments only) is used to solve the collisions.二次探测(只有正的增量)用于解决碰撞。代码#include<bits/stdc++.h>using namespace std;bool isPrime(int n){ if(n<=1)retu原创 2021-03-10 19:30:03 · 136 阅读 · 2 评论 -
PAT甲级-质数、进制转换类型-1015 Reversible Primes解题思路
1015 Reversible Primes (20 分)思路经典进制转换 和 判断是否质数函数代码#include<bits/stdc++.h>using namespace std;bool isPrime(int n) //判断是否质数{ if(n<=1)return false; int sqr = (int)sqrt(n); for(int i = 2;i<=sqr;i++) if (n%i == 0)return原创 2021-03-10 13:26:44 · 89 阅读 · 0 评论 -
PAT甲级-逻辑题类型-1101 Quick Sort解题思路
1101 Quick Sort (25 分)思路不需要考虑空间,考虑时间即可。多开几个空间,使用O(n)O(n)O(n)而不是O(n2)O(n^2)O(n2)输出格式问题,一般是没有输出,但需要回车,cout<<endl;即可代码#include<bits/stdc++.h>using namespace std;int main(){ int n; cin>>n; int num[100005]; int min_n[原创 2021-03-10 11:33:12 · 97 阅读 · 0 评论 -
PAT甲级-逻辑题类型-1093 Count PAT‘s解题思路
1093 Count PAT’s (25 分)思路找找逻辑,不需要暴力一遍循环即可~代码#include<bits/stdc++.h>using namespace std;int main(){ string s; cin>>s; int len = s.length(); int Pnum = 0,P_allnum = 0,PAnum = 0,PA_allnum = 0,all = 0; for(int i =0;i&l原创 2021-03-10 11:06:19 · 88 阅读 · 0 评论 -
PAT甲级-two points类型-1089 Insert or Merge解题思路
1089 Insert or Merge (25 分)思路插入排序和归并排序归并排序需要用到双指针游走,再借用sort代码#include<bits/stdc++.h>using namespace std;const int N =105;int origiin[N],tempOri[N],changed[N];int n;bool isSame(int A[],int B[]){ for(int i=0;i<n;i++) if(A[i原创 2021-03-08 11:16:48 · 122 阅读 · 0 评论 -
PAT甲级-二分查找类型-1044 Shopping in Mars解题思路
1044 Shopping in Mars (25 分)思路lower_bound当查找不出值,会返回一个超出范围的下标用scanf、printf避免超时代码#include<bits/stdc++.h>using namespace std;int main(){ int n,m; cin>>n>>m; int num,sum[100005]; sum[0]=0; for(int i = 1;i<=n;原创 2021-03-07 02:49:00 · 289 阅读 · 0 评论 -
PAT甲级-二分查找、进制转换类型-1010 Radix解题思路
1010 Radix (25 分)思路非常值得去做的一道题*max_element()isdigit()在 字符、数字 交叉时好用~总结:在涉及进制转换、题目提到大于或等于109、231大于或等于10^9、2^31大于或等于109、231时,尽量采用longlong,加减乘除的说不定就溢出了。longlong非常大溢出就会导致变成负数,但依然不影响我们去使用二分查找,见本题。代码#include<bits/stdc++.h>using namespace std;long原创 2021-03-06 20:09:10 · 178 阅读 · 0 评论 -
PAT甲级-二分查找类型-1085 Perfect Sequence解题思路
1085 Perfect Sequence (25 分)思路二分查找,大于某个值的数字下标用到sort、upper_bound#include<bits/stdc++.h>using namespace std;int main(){ int num[6]={2,3,6,7,23,45}; sort(num,num+6); //按从小到大排序 int pos1=lower_bound(num,num+6,7)-num;原创 2021-03-06 19:17:05 · 116 阅读 · 0 评论 -
PAT甲级-贪心类型-1038 Recover the Smallest Numbe解题思路
1038 Recover the Smallest Number (30 分)思路这题绝美,string+sort用的非常好,比较两个数不一定要数值型,我们可以指定以字符串拼接后再比较。输出的时候,注意不输出前面的0,后面的需要输出,还有答案为0需要输出0代码#include<bits/stdc++.h>using namespace std;bool cmp(string a,string b){ return a+b < b+a;}int main()原创 2021-03-06 16:31:36 · 109 阅读 · 0 评论 -
PAT甲级-贪心类型-1037 Magic Coupon解题思路
1037 Magic Coupon (25 分)思路读取时正数和负数分开存储,其余没问题代码#include<bits/stdc++.h>using namespace std;bool cmp(int a,int b){ return a>b;}int main(){ int num1[100005]; int num2[100005]; int num3[100005]; int num4[100005]; in原创 2021-03-06 16:05:39 · 106 阅读 · 0 评论 -
PAT甲级-贪心类型-1070 Mooncake解题思路
1070 Mooncake (25 分)思路秒杀,不解释代码#include<bits/stdc++.h>using namespace std;struct stu{ double price; double num; double one;}stud[1005];bool cmp(stu a, stu b){ return a.one>b.one;}int main(){ int N,M; scanf("%d原创 2021-03-06 16:03:23 · 121 阅读 · 0 评论 -
PAT甲级-贪心类型-1033 To Fill or Not to Fill解题思路
1033 To Fill or Not to Fill (25 分)思路该题是找出最便宜路线的价格,不能到达终点就输出最大到达路径即可。注意细节:起点没有加油站,直接输出最大路径为0具体做法:把终点设置为一个加油站,花费为0,距离最远。在可以到达的前提下,寻找比当前更便宜的加油站,算好到达所用花费,若无比当前更便宜,需把油箱加满。题型类似:这类贪心,寻找花费最少,需要用到sort,再用循环。代码#include<bits/stdc++.h>using namespace s原创 2021-03-06 12:59:16 · 278 阅读 · 0 评论