自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 PAT A1046 Shortest Distance (20 分)

目录题意注意点题解题意一条环形路径,给出路径上每个点到下个点的距离。求给定两点之间的最短距离。注意点如果直接往两个方向遍历,最后会超时题解可以存储一个方向的从起点到每个点的距离,然后存储一个总距离total,另一种方式的距离就是做差#include <stdio.h>#include <algorithm>using namespace std;const int maxn = 100010;int main() { int n, exit[maxn

2021-03-11 09:30:47 66 1

原创 PAT A1107 Social Clusters (30 分)

目录题意注意点题解题意给出N个人各自的hobby,有相同hobby的在一组(若AB有相同的,BC有相同的,ABC在同一组)。求组数和每组的人数。注意点hobby个数后的“:”记得吸收course[h]代表这个hobby的集合的根结点题解算法笔记:course[h]用以记录任意一个喜欢活动h的人的编号,那么findFather(course[h])就是这个人所在社交网络的根结点。对于当前读入的人i和他的每一个活动h,只需要合并i和findFather(course[h])即可。#inc

2021-03-11 08:23:25 85

原创 PAT A1066 Root of AVL Tree (25 分)

目录题意注意点题解题意题目给出一组数据,构建一个平衡二叉树,输出这个平衡二叉树的根节点的权值注意点注意插入结点时平衡的左旋右旋操作注意更新高度题解#include <stdio.h>#include <algorithm>using namespace std;const int maxn = 25;//定义,新建结点struct node { int data, height; node* lchild, *rchild;} Node[

2021-03-10 21:04:48 64

原创 PAT A1099 Build A Binary Search Tree (30 分)

目录题意注意点题解题意题目给定一棵排序二叉树的每个结点的子结点,和所有权值,将其填入二叉排序树中,最后输出层序序列。注意点题目直接给了每个结点从0~N-1,因此用静态数组存储二叉树题解解题思路:① 定义静态二叉树② 读取输入数据,得到静态的二叉树③ 利用二叉排序树中序序列递增的特性,中序遍历该二叉树并将排序后的权值填入二叉树数组中④ 层序遍历输出#include <stdio.h>#include <queue>#include <algorith

2021-03-10 19:31:45 55

原创 PAT A1064 Complete Binary Search Tree (30 分)

目录题意注意点题解题意题目给定一组序列,可以用来建立完全二叉树。输出该二叉树的层序序列。注意点log函数在math.h头文件里,logx()是以x为底的对数函数递归构建完全二叉树还可以通过每个结点和他孩子结点的关系用数组存放二叉树题解递归构造:#include <stdio.h>#include <math.h>#include <queue>#include <algorithm>using namespace std;con

2021-03-10 19:07:57 35

原创 PAT A1043 Is It a Binary Search Tree (25 分)

目录题意注意点题解题意题目给出一个先序序列,判断是不是二叉排序树或镜像二叉排序树,如果是,输出它的后序遍历序列注意点因为题目给的是先序序列,因此可以通过前两个数字的大小关系判断出是否是镜像的题解解题思路:① 定义结点,新建结点的函数,创建镜像和非镜像二叉树的函数create② 读入数据,判断是否是镜像的,并构造二叉树③ 将构造的二叉树先序遍历并将其与题目提供的序列对比,如果相同则打印YES并输出后序序列,否则打印NO#include <stdio.h>const int

2021-03-10 16:55:14 35

原创 PAT A1004 Counting Leaves (30 分)

目录题意注意点题解题意题目提供结点数和非叶子结点的孩子和数目。求每一层的非叶子结点数目。注意点当只有一个根结点时,该根结点也算叶子结点题解BFS广度优先搜索:#include <stdio.h>#include <queue>#include <vector>using namespace std;const int maxn = 110;//定义结点struct node { int layer; vector<int

2021-03-10 14:54:13 55

原创 PAT A1106 Lowest Price in Supply Chain (25 分)

目录题意注意点题解题意PAT A1079 Total Sales of Supply Chain (25 分)PAT A1090 Highest Price in Supply Chain (25 分)与这两题类似,只不过改成了输出最小的零售价注意点同上两题题解解题思路:①定义数的结点,因为不需要数据域,直接用vector数组定义②读入每个结点的孩子结点,创建静态树③DFS函数,到最深处返回,如果小于最小路径则覆盖④输出结果#include <stdio.h>#inc

2021-03-10 12:10:11 47

原创 PAT A1094 The Largest Generation (25 分)

目录题意注意点题解题意给出树形的家谱,求人最多的一代。题目给出每个有孩子的家庭成员的孩子。注意点层数和根节点都是从1开始计算树的结点结构体中需要一个数据域存放所在层数用一个数组存放每层的人数题解解题思路:①定义结点,其中有所在层数信息②读入每个结点的孩子信息,创建静态二叉树③BFS函数,将每层的人数累加到numlayer数组中④遍历numlayer数组,找出人数最多的一层,输出人数及层数#include <stdio.h>#include <queue&gt

2021-03-10 11:45:24 41

原创 PAT A1090 Highest Price in Supply Chain (25 分)

目录题意注意点题解题意对于一个树形经销网络,题目给出所有商店的数目,原价,每次涨幅以及每个经销商的供应商。求最高的零售价和用这个零售价的零售商数目。注意点题目相当于给出父节点,要转换成子结点每个结点都不需要存数据域,因此除了用结构体表示结点外,可以直接用一个vector数组表示所有结点题解解题思路:①定义结点,不需要数据域②读入每个商店的供应商,转换为对应供应商的下一家,并判断出根结点③DFS函数,记录每条销售路径经过的中间商,保留最大的④输出最大零售价和数目#include

2021-03-10 10:48:41 45

原创 PAT A1079 Total Sales of Supply Chain (25 分)

目录题意注意点题解题意题目提供一个树形的经销网络,每经过一次中间商售价就增加r%,给出每家零售商的销售量和原价,计算商品的总销售额注意点子结点数量不固定,用vector存储输出格式控制为小数点后一位供应商不算作一次中间商题解解题思路:①新建结点,由于只需要知道经过了多少个中间商和零售商的销售额,所以数据域只需要存零售商的销售额②由于题目直接确定了每个结点的序号,因此不用newNode,按序号读入结点的信息即可③DFS函数,递归边界为到达零售商,并将经过的路径产生的涨价和销售量相乘加

2021-03-10 10:19:55 89

原创 PAT A1053 Path of Equal Weight (30 分)

目录题意题目注意点题解题意题目注意点虽然和先序遍历相似,但是还是要用DFS找出每条岔路的结果用一个全局数组path存放每条路径经过的结点题目直接给出了每个结点的序号,因此不需要自己定义newNode函数,直接存入数组就行题解解题思路:①定义树的结点,由于题目给了结点序号,不需要newNode函数②读取每个结点的权重和孩子结点存入Node数组③将每个结点的孩子结点按权重从大到小排序,以便在输出时按递减序输出④进行DFS,递归边界为权重和相等并且已经到达叶子结点;没有到达叶子结点就相等

2021-03-10 09:31:02 40

原创 PAT A1042 Shuffling Machine (20 分)

目录题意注意点题解题意题目给出洗牌次数和洗牌顺序,输出洗牌后的整副扑克注意点直接利用洗牌顺序访问数组中对应下标的扑克存到结果里,得到一次洗牌后的数组,再赋值给原数组,继续执行题解#include <stdio.h>int main(void){ int n; scanf("%d", &n); int order[60]={0}; int start[60]={0}; int result[60]={0}; char mp

2021-03-09 23:28:06 71

原创 PAT A1102 Invert a Binary Tree (25 分)

目录题意注意点题解题意题目给出一棵二叉树每个结点的孩子结点的情况,并且要求反转二叉树,输出其层序序列以及中序序列注意点存取字符矩阵的时候直接将其反转存入字符之间空格和回车的吸收题解静态二叉树实现:#include <stdio.h>#include <queue>using namespace std;const int maxn = 15;struct node { int data; int lchild, rchild;}Node[

2021-03-09 23:04:44 58

原创 PAT A1086 Tree Traversals Again (25 分)

目录题意注意点题解题意根据题目给定的等价于中序序遍历的栈操作,还原出该二叉树,并将其后序序列输出注意点先序遍历的压栈的值不一定是从1到n的连续整数也可以用string容器读入push或pop指令题解静态数组:注意在create函数中定义root时赋值要给pre[preL],可能是因为要保证不同子树的根结点不会被存到同一下标上#include <string.h>#include <stdio.h>#include <stack>using na

2021-03-09 20:14:03 64

原创 PAT A1020 Tree Traversals (25 分)

目录题意注意点题解题意给定一棵二叉树的后序序列和中序序列,输出它的层序序列注意点题解思路:①读取数据②根据后序序列和中序序列重建二叉树③层序遍历二叉树,输出每个结点的值函数:①重建二叉树函数create和算法笔记先序和中序构建的函数类似,注意numLeft的取值②层序遍历函数layerOrderqueue中的元素应该是指针类型#include <stdio.h>#include <queue>using namespace std;const int

2021-03-09 11:00:45 64

原创 PAT B1009 说反话 (20 分)

目录题意注意点题解题意将句子中的单词从后往前输出注意点单词内顺序不需要换题解字符数组实现用二维字符数组实现单词的存储。#include <stdio.h>#include <string.h>int main(void){ char str[85][85]; int i=0; while (scanf("%s", str[i])!=EOF) {//适用于PAT单点测试 i++; } i--;//i用

2021-03-09 08:43:24 46

原创 PAT B1022 D进制的A+B (20 分)

目录题意注意点题解题意两数之和进制转换注意点二者的和不会超过231因此数组长度大于31即可处理0的特殊情况(do…while)题解使用除基取余法#include <stdio.h>int main() { int a, b, c, d; scanf("%d%d%d", &a, &b, &d); c = a + b; int z[40], num = 0; do { z[num++] = c %

2021-03-09 08:10:22 48

原创 PAT A1091 Acute Stroke (30 分)

目录题意题目注意点题解题意相当于把二维的找块问题升级为三维版,并且每个块的1的和如果大于给定的T需要加起来,最后输出总的值题目注意点在每次BFS之后就返回这次的vol值vol值小于T时返回0题解解题思路:①定义结点、矩阵、inq、增量数组②定义判别函数,判别是否是符合的坐标③定义BFS函数,每次找出一个块并返回里面1的个数,如果小于T则返回0④主函数内读入matrix,定义ans存放最终结果⑤遍历matrix中所有点,累加每次BFS的结果,最后输出#include <st

2021-03-08 23:35:20 66

原创 PAT A1103 Integer Factorization (30 分)

目录题意题目注意点题解题意题目给出n,k,p,用k个数的p次方的和给出n,若有多个方案,给出和最大的k个数题目注意点每个数都可以选多次,注意DFS函数的入口先把可能的幂次数存到一个vector里题目要求底数从大到小输出,因此要从最大遍历到最小也需要用vector实时存储当前的方案题解思路见算法笔记“一类常见DFS问题的解决方法”①预处理所有可能出现的底数,存进vector:fac里此处每个数都可以选多次,因此选择了index之后的DFS函数还可以继续传入index最终以maxFa

2021-03-08 18:04:07 76

原创 PAT A1097 Deduplication on a Linked List (25 分)

目录题意题目注意点题解题意题目提供数个结点和链表头,将其值的绝对值第一次出现的结点连成一条链表,出现多次的连成第二条链表。题目注意点输出顺序依然按照题目给出的顺序,因此需要一个记录输入是顺序的变量order题解再回顾一下算法笔记解此类题的思路:①定义静态链表(的结点)②在程序开始时初始化链表(此处对flag,appear,order进行了初始化)③遍历链表(将不在链表上的结点,data的绝对值不是第一次出现的结点区别出来)④用比较函数排序,按题目要求的输出顺序排序结点⑤按照要求输出

2021-03-08 16:58:59 66

原创 PAT A1074 Reversing Linked List (25 分)

目录题意题目注意点题解题意题目给定数个结点,和数字k,要求反转链表的每k个元素题目注意点最后不足k个元素不需要反转题目提供的结点中可能会有不在链表上的结点运用两重循环处理每一组的反转问题一组反转的最后一个节点和下一组的第一个节点的链接题解注意算法笔记提供的思路:①定义静态链表(的结点)②在程序开始时,对链表的结点进行初始化(此处为结点在链表上的位置order)③通过首节点的遍历得到整条链表(避开不在链表上的结点)④对结点数组进行排序,将有效结点排在前面⑤根据题意进行操作(此处

2021-03-08 16:07:53 67

原创 PAT A1056 Mice and Rice (25 分)

目录题目注意点题解题目注意点题意讲的不是很清楚,第三行实际上是老鼠需要分组的顺序,而第二行是从0~np-1顺序排列的,输出时需要按照第三行的顺序输出,即从第二行的19(6号位)开始输出每轮循环之前需要提前确定好每轮的组数,以便给淘汰的老鼠排名题解算法笔记:#include <stdio.h>#include <queue>using namespace std;const int maxn = 1010;struct mouse{ int rank;

2021-03-07 22:37:17 52

原创 PAT A1051 Pop Sequence (25 分)

目录题目注意点题解题目注意点每次读取一行数据时都要清空栈另外用一个数组存储出栈序列,防止判错时让后面的数字错位入栈顺序用第二层循环表示,每次压栈一次之后判断如何出栈,而不是读取了出栈序号在思考如何压栈题解算法笔记:#include <stdio.h>#include <stack>using namespace std;const int maxn = 1010;int a[maxn];stack<int> st;int main() {

2021-03-07 19:07:34 128

原创 PAT A1022 Digital Library (30 分)

目录题目注意点题解题目注意点由于每个关键词string都可能对应多本书,不能用string对int的唯一映射,应该用string对set《int》的映射注意关键词需要一个个词分开读取输出书号时需要按照7位数字输出,最后两个点就是这个问题题解注释部分也可以读取关键词,类似于PAT A1071 Speech Patterns (25 分)的解法#include <stdio.h>#include <iostream>#include <string>#

2021-03-07 16:56:48 62

原创 PAT A1071 Speech Patterns (25 分)

目录题目注意点题解题目注意点可以直接让一个string容器加上字符!!不止可以加字符串判断循环结束题解用getchar()在最后吸收空格时可能出现问题导致第三个点一直不能过。。。#include <stdio.h>#include <iostream>#include <string>#include <map>using namespace std;bool isLegal(char c) { if (c >= '

2021-03-07 15:52:18 76

原创 PAT A1054 The Dominant Color (20 分)

目录题目注意点题解题目注意点数字范围224并没有超过int的范围,其实可以用int可以用map建立int到int的映射解题题解用数组计算每个数出现的次数,当大于分辨率的一半时直接输出该数字#include <stdio.h>#define maxSize 100000000typedef long long LL;LL count[maxSize] = {0};int main() { LL m, n, rsl, num; scanf("%lld%ll

2021-03-07 14:30:30 44

原创 PAT A1100 Mars Numbers (20 分)

目录题目注意点实现题目注意点由于火星文,需要按行读入:getline(cin, str);要对数字和火星文进行区分不会输出个位和十位的0实现在init函数里直接在火星文与数字之间建立映射算法笔记题解:#include <stdio.h>#include <iostream>#include <map>#include <string>using namespace std;//0~12的火星文string numEarth[1

2021-03-06 22:18:23 58

原创 PAT A1052 Linked List Sorting (25 分)

目录题目注意点实现题目注意点要判断结点是否在链表上当没有有效结点时要特判输出0 -1注意-1不需要用%05d控制输出实现#include <stdio.h>#include <algorithm>using namespace std;#define maxSize 100020struct Node { int addresse; int data; int next; int flag;//是否在链表上}node[maxS

2021-03-06 18:04:54 50

原创 PAT A1032 Sharing (25 分)

目录题目注意点实现题目注意点要按%05d的格式补0输出如果按两条链表叠加遍历的方法复杂度为O(nm),最后一个点会运行超时,要改为检测某一地址有无在另一条链表中出现过,时间复杂度为O(n+m)实现#include <stdio.h>#define maxSize 100010struct Node { char ch; int next; bool flag;}node[maxSize];int main() { int head1, he

2021-03-06 17:14:27 70

原创 PAT A1060 Are They Equal (25 分)

目录题目注意点实现思路算法笔记题解:题目注意点不只是有纯小数第一位是0,可能会出现类似00123这样的数,因此要对字符串进行预处理,去掉前导0实现思路首先将所有的数分成两类:整数部分为0整数部分不为0首先,对这两种情况分别获取他们的指数大小,并且去掉有效数字前的0和小数点然后,截取出有效数字中的n位,不够的补0最后,比较截出的字符串和指数是否都相等,输出结果算法笔记题解:#include <iostream>#include <string>usi

2021-03-01 17:02:56 38

原创 PAT A1063 Set Similarity (25 分)

目录题目注意点实现题目注意点本题需要去除重复数字,因此用set做很方便find()函数找不到时返回end(),用作判断条件实现#include <stdio.h>#include <set>using namespace std;double cmp(set<int> a, set<int> b) { int c = 0, t = 0; for (set<int>::iterator it = a.begin()

2021-02-28 20:16:05 71

原创 PAT A1047 Student List for Course (25 分)

目录题目注意点实现题目注意点输出选课学生的姓名时,需要按照字典序输出,写比较函数的时候可以直接比较学生名字的下标,更快实现用二维字符数组存储每个学生的姓名,每个姓名对应一个下标,正好可以存进课程的vector中#include <string.h>#include <stdio.h>#include <vector>#include <algorithm>using namespace std;const int maxn = 4001

2021-02-27 17:30:23 38

原创 PAT A1039 Course List for Student (25 分)

目录题目注意点实现题目注意点数据太大,要用字符串hash把姓名和数字一一对应要用vector减少空间消耗输出学生所选课程时要按递增序输出实现每个学生选择的课程都存在一个vector里面,因此需要创建一个vector的数组存放所有学生的选课情况算法笔记题解:#include <stdio.h>#include <algorithm>#include <vector>using namespace std;const int M = 26 * 2

2021-02-27 16:19:33 82

原创 PAT A1024 Palindromic Number (25 分)

目录题目注意点实现题目注意点注意大整数加法的最后一次进位,不要忘记不能只用10位数组存储,经过数次加法后大整数长度会增加很多实现#include <stdio.h>#include <string.h>struct bign { int d[1000]; int len; bign() { memset(d, 0, sizeof(d)); len = 0; }};bool isPalin(bign

2021-02-23 11:46:50 71

原创 PAT A1023 Have Fun with Numbers (20 分)

目录题目注意点实现题目注意点乘2以后的数字长度不一样时直接输出No对大整数的乘法进行处理时,最后的进位可能不止1位,要用一个while循环把最后的进位的每一位分别存进高位中实现#include <stdio.h>#include <string.h>struct bign { int d[25], num[10];//num记录每个数字出现的次数 int len; bign() { memset(d, 0, sizeof(d)

2021-02-23 10:39:37 52

原创 PAT B1017 A除以B (20 分)

目录题目注意点实现题目注意点在定义结构体时初始化的方法只能在c++中使用最后输出时的长度要用c的长度而不是原来a的长度实现#include <stdio.h>#include <string.h>struct bign{ int d[1010]; int len; bign() { memset(d, 0, sizeof(d)); len = 0; }};bign change(char *str)

2021-02-22 22:23:46 42

原创 PAT A1096 Consecutive Factors (20 分)

目录题目注意点实现题目注意点题目要求输出最多的能整除n的连续整数,同样多的情况下,输出第一个数最小的遍历从2~√n才能保证最后一个点不超时(因为遍历时n不会被除自己以外的大于√n的整数整除)注意处理1和质数的情况实现#include <stdio.h>#include <math.h>typedef long long LL;int main() { LL n, max = 0, start = -1; scanf("%lld", &n)

2021-02-18 16:30:32 91

原创 PAT A1059 Prime Factors (25 分)

目录题目注意点实现题目注意点记得要在main函数里调用findPrime函数findPrime函数里要写成i < maxn要特判n = 1的情况,输出1 = 1实现打印素数表时可以用埃氏筛法,也可以用直接遍历2~maxn的每个数判断是否是素数的方法#include <stdio.h>#include <math.h>const int maxn = 100010;int prime[maxn], pNum = 0;bool p[maxn] = {0};

2021-02-17 22:38:19 66

原创 PAT A1078 Hashing (25 分)

目录题目注意点实现题目注意点给出的Tsize如果不是素数要选一个大于它的最小的素数产生冲突时需要使用平方探查法(只有正增量)实现#include <stdio.h>#include <math.h>const int maxn = 10010;int mSize, n;bool hashTable[maxn] = {0};bool isPrime(int n) { if (n <= 1) return false; else {

2021-02-17 16:04:47 62

空空如也

空空如也

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

TA关注的人

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