![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
PAT A
Siumai
此人不懒,但什么都不想写
展开
-
PAT A 2019.9 7-4 Dijkstra Sequence (30分)
一、题目概述验证给定的K个序列是否为Dijkstra序列二、思路对于每个序列,执行dijkstra算法求得单元最短路径距离。若为Dijkstra序列,则序列中元素按照该距离非降序排列。三、代码#include <cstdio>#include <vector>using namespace std;#define INF 0x7FFFFFFFint ma...原创 2020-04-20 11:12:09 · 264 阅读 · 0 评论 -
PAT A 2019.9 7-3 Postfix Expression
一、题目概述依据给定语法树,输出后缀表达式二、思路对语法树后序遍历输出单元数据。注意:单枝树按照先序NLR顺序输出数据三、代码#include <iostream>#include <vector>#include <string>using namespace std;vector<int> lchild(21), rchild...原创 2020-04-20 10:49:54 · 125 阅读 · 0 评论 -
PAT A 2019.9 7-2 Merging Linked Lists (25分)
一、题目概述给定非空单链表L1, L2,知其一结点数时另一链表的两倍或以上。要求将短链表逆置,插入长链表。二、代码(PAT暂未收录,不保证正确)#include <cstdio>#include <vector>#include <algorithm>using namespace std;struct node{ int data, add...原创 2020-04-19 13:07:46 · 416 阅读 · 0 评论 -
PAT A 2019.9 7-1 Forever (20分)
一、题目概述存在整数A, 满足以下条件:1、A共K位2、A各位数字和为m3、A + 1各位数字和为n4、m和n的最大公因数为大于2的素数要求:依据给定K和m,输出所有满足条件的n和A。输出按照n和A升序二、思路设A各位数字之和为m,则A + 1各位数字之和n有以下可能:1、A末尾数字不是9,显然:n = m + 12、A尾部有k位连续的9:n = m + 1 - k * 9归...原创 2020-04-19 12:43:06 · 188 阅读 · 1 评论 -
PAT A 1073 Scientific Notation (20分)
### 一、题目概述输出给定依照科学计数法规范表示的数字### 二、思路数符:若为'-'则直接输出'-';有效数位:仅将数字部分保存为字符串;阶码:保存为整形;小数点及是否补零的确定:(1)阶码e < 0:数字串前补|e|个'0',下标1处插入小数点'.';(2)阶码0 <= e < 数字有效位数 - 1数字串下标1 + e处插入小数点'.'(3)阶码e >= 数字有效位数字串尾补e - 数字有效位 + 1个'0'### 三、代码```cpp#include <cstd原创 2020-03-20 11:10:28 · 91 阅读 · 0 评论 -
PAT A 1068 Find More Coins (30分)
一、题目概述依据给定钱币面值,找出总金额恰为给定M的最小钱币组合。二、思路将货币面值降序排序;构造降维动态规划数组dp[],dp[j]为总面值和不多于j的最大总面值和,i从1至N迭代,每次求出前i个货币的dp值。最终若dp[M] != M,即无法找到总面值恰为M的钱币组合,无解。若有解,根据数组ans[i][j]记录的更新情况输出最小组合。三、代码#include <cstd...原创 2020-03-18 15:19:58 · 106 阅读 · 0 评论 -
PAT A 1132 Cut Integer (20分)
一、题目概述略;二、思路利用好< string >中的substr()函数。注意:除数为0输出"No"。三、代码#include <iostream>#include <cstdlib>#include <string>using namespace std;int main(){ int N; cin >...原创 2020-02-17 13:33:36 · 96 阅读 · 0 评论 -
PAT A 1124 Raffle for Weibo Followers (20分)
一、题目概述依据给定转发用户名单及抽奖机制,筛选中奖者。抽奖机制:第S个用户为第一个中奖用户, 之后每N个用户为中奖用户。二、思路设当前用户是第i个转发用户, 第S个用户是首个中奖用户,则若(i - S)是N的非负整数倍,则当前用户中奖(若非已中奖用户)。若当前用户中过奖,令S加一即可实现跳过。用map作为存储已中奖用户名单的数据结构,判断用户是否已经中过奖。三、代码#include...原创 2020-02-16 10:30:24 · 177 阅读 · 0 评论 -
PAT A 1121 Damn Single (25分)
一、题目概述升序输出无配偶或配偶未出席的客人ID。二、思路略;三、代码#include <cstdio>#include <vector>#include <algorithm>using namespace std;int main(){ int N, M; vector<int> spouse(100000, ...原创 2020-02-15 17:13:14 · 111 阅读 · 0 评论 -
PAT A 1119 Pre- and Post-order Traversals (30分)
一、题目概述判断给定先序、后序遍历序列是否可以唯一确定一个二叉树,并输出所确定的二叉树的中序遍历序列。二叉树不唯一时,构造可确定的任一二叉树中序序列。二、思路判断是否可以唯一确定:二叉树先序序列的第二个元素是左子树的根元素(若有左子树),后序序列的倒数第二个元素是右子树的根元素(若有右子树)。当先序第二、后序倒数第二个元素相同时可知,该元素即可为左子树的根元素,也可为右子树的根元素,二叉树不...原创 2020-02-15 16:33:36 · 160 阅读 · 0 评论 -
PAT A 1118 Birds in Forest (25分)
一、题目概述依据给定信息,求解:(1)树的数量;(2)鸟的数量;(3)判断任两只鸟是否在同一个树上。信息受以下规范约束:(1)每张照片上的鸟都在同一棵树上(可能有多张照片描述同一棵树);(2)鸟编号连续,从1开始,且所有鸟都在照片中出现。二、思路(1)输入的同时统计鸟的数量。(2)鸟和照片作为结点构造无向图,则每个连通分量就是一棵树,树的数量即连通分量数。(3)为判断鸟是否属于同一...原创 2020-02-15 15:29:19 · 115 阅读 · 0 评论 -
PAT A 1117 Eddington Number (25分)
一、题目概述依据给定骑行记录计算Eddington number——E。E满足在N条记录中,有E天骑行超过E公里。二、思路按值降序排序,E取最后一个dist[i] > i的i。三、代码#include <cstdio>#include <vector>#include <algorithm>using namespace std;int ...原创 2020-02-15 14:44:25 · 108 阅读 · 0 评论 -
PAT A 1115 Counting Nodes in a BST (30分)
一、题目概述依据给定数据序列构造BST,并求出BST底部两层结点数。二、思路1、经典的二叉排序树按序插入构造;2、层序遍历统计底部两层结点数底部两层结点数。三、代码#include <cstdio>#include <vector>#include <queue>#include <algorithm>using namespac...原创 2020-02-15 13:12:49 · 93 阅读 · 0 评论 -
PAT A 1114 Family Property (25分)
一、题目概述依据给定个人房产信息、家族信息,统计:1、家族数量(有任一种血缘关系即属于同一家族);2、各家族的:家族代表(全家最小ID)、家族成员数、家族平均房产数、家族平均房产面积。二、思路无向图dfs统计。set作为数据结构存储所有id,实现id升序遍历,则家族遍历起点即家族代表id(最小号id)。三、代码#include <cstdio>#include <...原创 2020-02-15 12:52:04 · 103 阅读 · 0 评论 -
PAT A 1113 Integer Set Partition (25分)
一、题目概述略二、思路排序即可三、代码#include <cstdio>#include <vector>#include <algorithm>using namespace std;int main(){ int N, diff = 0; scanf("%d", &N); vector<int>...原创 2020-02-15 12:16:08 · 107 阅读 · 0 评论 -
PAT A 1112 Stucked Keyboard (20分)
一、题目概述依据给定串,及按键卡住的判定标准,输出可能卡住的按键,及正常输出的串。按键卡住的判定:若按键卡住,则每次输出都会输出k次。即该按键连续出现的次数一定是k的倍数。二、思路字符串以连续的字符段为单位处理时,有一种好用的方式:下标i从1到串尾+1位迭代,每次迭代处理前一位字符(str[i - 1]),可以正确处理到每个字符,不会漏掉易于出错的末尾字符处理。1、找出肯定没卡住的按键:...原创 2020-02-15 11:18:17 · 108 阅读 · 0 评论 -
PAT A 1111 Online Map (30分)
一、题目概述求解两条路径:1、源点、汇点间最短距离路径,若路经距离相同,选择耗时更短者。2、源点、汇点间耗时最短路径,若路径耗时相同,选择路线上结点更少者。二、思路两次Dijkstra算法。代码量较大,注意不要出错。三、代码#include <cstdio>#include <vector>using namespace std;#define INF...原创 2020-02-14 17:56:32 · 149 阅读 · 0 评论 -
PAT A 1110 Complete Binary Tree (25分)
一、题目概述若给定树为完全二叉树输出"YES"和最后一个结点下标,否则输出"NO"和根节点下标二、思路1、根节点的确定根节点一定不为任一结点的子树,则输入时记录每个结点是否为子树的状态。2、完全二叉树的判定对树层序遍历,若非完全二叉树,则一定存在某一层,该层两个结点间存在空结点。现象可以在队列中得到反映,即:若出队结点是空结点,且后续出队有非空结点,则不是完全二叉树。三、代码#in...原创 2020-02-14 16:56:41 · 181 阅读 · 0 评论 -
PAT A 1109 Group Photo (25分)
一、思路1、排序:对N个人按照身高降序排序,身高相同者按字典序排序。2、按规则构造阵型:(1)确定每行人数 num = N / K;//num为该行的人数 if( !i )//第一行人数可能不同 num += N % K;(2)行的构造人们插入队列的顺序存在规律,即从下标num/2的位置开始,向两侧排列。i从1~num迭代,fl...原创 2020-02-14 15:16:13 · 88 阅读 · 0 评论 -
PAT A 1108 Finding Average (20分)
一、思路1、测试点分析(1)测试点1:正确判断小数点是否非法(2)测试点2:合法元素总数为1时是否正确输出number(无s)。(3)测试点3:小数点出现在首位处是合法的。如:.95,95.2、判断(1)合法性判断: scanf("%s", str);//str保存输入字符串 sscanf(str, "%lf", &val);//字符串转doub...原创 2020-02-14 13:48:30 · 159 阅读 · 0 评论 -
PAT A 1107 Social Clusters (30分)
一、题目概述依据给定N个用户的爱好,构造出一个社交网络,找到社交网络中的同好圈的个数,并降序输出各同好圈中的成员数。二、思路1、同好圈的示例:A的爱好:1, 3;B的爱好:3, 5;C的爱好:5, 6;显然:A、B是关于3的同好,B、C是关于5的同好。A、B、C组成了一个人同好圈,即使A、C没有共同爱好。2、解决方案构造无向图,统计连通分量数、各连通分量中用户结点数。标号范围[1...原创 2020-02-14 11:51:52 · 107 阅读 · 0 评论 -
PAT A 1106 Lowest Price in Supply Chain (25分)
一、思路DFS遍历,到达底层进行价格分析。注意根供应商直接给出价格,不以倍率r涨价。二、代码#include <cstdio>#include <vector>using namespace std;int N, cnt = 0;double P, r, Min = 0x7FF0000000000000;vector<vector<int>...原创 2020-02-14 11:14:47 · 106 阅读 · 0 评论 -
PAT A 1105 Spiral Matrix (25分)
一、题目概述要求:1、据给定N, 找到m、n使得m * n = N, 且m-n的值最接近0;2、使用N个元素构造m x n的螺旋矩阵, 元素降序。二、思路1、m、n的选择:n取不大于根号N,且能被N整除的最大值, m = N / n。 for( n = sqrt(N); N % n; --n ); m = N / n;2、矩阵的构造:width、height控制高度和...原创 2020-02-14 10:44:18 · 119 阅读 · 0 评论 -
PAT A 1104 Sum of Number Segments (20分)
一、思路公式:sum +=a[i] * (i + 1) * (N - i);二、代码#include <cstdio>int main(){ int N; double sum = 0, temp; scanf("%d", &N); for( int i = 0; i < N; ++i ) { scanf(...原创 2020-02-13 20:26:49 · 101 阅读 · 0 评论 -
PAT A 1103 Integer Factorization (30分)
一、题目概述给定正整数N、K、P, 将N划分为K个数的和,且每个数均为某数的P次幂。二、思路使用DFS探测所有可能的组合。1、找到因数的上界H,应满足 H^P<=N for( int i = 0; pow_P(i) <= N; ++i )//探测上界的同时,预存储将用到的所有值的P次方以俭省时间 val.push_back( pow_P(i) ); ...原创 2020-02-13 19:55:43 · 79 阅读 · 0 评论 -
PAT A 1102 Invert a Binary Tree (25分)
一、题目概述对二叉树反转并输出层序、中序遍历序列。二、思路方法很多,可以建树时反转左右子树,也可以遍历时交换访问左右子树顺序。注意:1、正确读入换行符;2、寻找根节点:即不为任何结点的子树的结点。三、代码#include <cstdio>#include <queue>#include <vector>using namespace std...原创 2020-02-13 17:35:59 · 85 阅读 · 0 评论 -
PAT A 1101 Quick Sort (25分)
一、思路若一个数是序列中左侧数的最大值和右侧数的最小值,则可作为枢轴。注意测试点2格式错误:若无符合要求的数,第二行输出空行。二、代码#include <cstdio>#include <vector>using namespace std;int main(){ int N; scanf("%d", &N); vector&...原创 2020-02-13 16:55:55 · 99 阅读 · 0 评论 -
PAT A 1100 Mars Numbers (20分)
一、思路火星文转数字较为简单;数字专火星文注意:1、仅数字为0输出"tret";2、个位和十位均有输出才输出空格。二、代码#include <iostream>#include <cctype>#include <cstdio>#include <map>using namespace std;int main(){ ...原创 2020-02-13 16:12:40 · 88 阅读 · 0 评论 -
PAT A 1099 Build A Binary Search Tree (30分)
一、题目概述依据给定二叉树结构,建立二叉排序树,并输出层序遍历序列。二、思路中序遍历建树,层序遍历输出;三、代码#include <cstdio>#include <vector>#include <algorithm>#include <queue>using namespace std;typedef struct{ ...原创 2020-02-13 15:28:37 · 99 阅读 · 0 评论 -
PAT A 1098 Insertion or Heap Sort (25分)
一、思路模拟堆排序和插入排序的执行过程;插入排序模拟:第i轮排序后,前i个元素有序,其余元素位置顺序不改变。sort( ans.begin(), ans.begin() + i );//第i轮堆排序模拟:1、建堆 for( int i = N / 2 - 1; i >= 0; --i ) adjust( i, N );2、第i轮排序 s...原创 2020-02-13 14:54:02 · 75 阅读 · 0 评论 -
PAT A 1096 Consecutive Factors (20分)
一、题目概述求某整数的最大连续因数序列。二、思路构造一个数值区间,len为区间长度, num为区间内数值的积,不断尝试区间内数值的积是否为因数。num为因数时,增加尝试的区间长度。难点:测试点6用例为一个大素数,i从2到N迭代会出现测试点超时。此时考虑分为N是素数与非素数两种情况:1、N非素数,则至少存在两个因数,若两个因数连续,则最大可能为根号N的上下界(设根号N不为整数,若为整数则...原创 2020-02-13 12:54:22 · 134 阅读 · 0 评论 -
PAT A 1078 Hashing (25分)
一、思路Hash存储是元素关键字和存储位置存在映射关系,实现接近o(1)时间的访问效率的数据结构。hash表的构造有两个关键要素:散列函数H()和冲突处理方式。1、散列函数散列函数确定了一般情况下关键字的存储位置,本题使用的除留余数法:H(key)=key%TSize。如:Tsize(表长)为7时,H(7) = 7 % 7 = 0,即7存放在table[0]中。但若存入14,H(14)同...原创 2020-01-17 17:38:04 · 132 阅读 · 0 评论 -
PAT A 1077 Kuchiguse (20分)
一、思路后向前寻找最长公共后缀二、代码#include <iostream>#include <string>using namespace std;int main(){ int N, min = 0; cin >> N; getchar(); string str[N]; for( int i = 0; ...原创 2020-01-17 15:52:54 · 193 阅读 · 0 评论 -
PAT A 1075 PAT Judge (25分)
### 一、题目要求有N个学生,某次考试有K个问题,给出M条成绩记录,要求根据记录统计输出排名名单。不加入名单的条件:K个问题均未提交或未通过编译。成绩输出格式:未提交输出'-',提交且编译未通过成绩为零,其他成绩正常输出。### 二、思路设考生N位,科目K门:**1、构造数组**(1)flag[N + 1], 若考生i存在一门科目成绩有效即在区间[0, full_mark]内,则flag[i] = 1可以参与排名。(2)score[N + 1][K + 1], score[i][j] =原创 2020-01-17 12:31:53 · 88 阅读 · 0 评论 -
PAT A 1074 Reversing Linked List (25分)
一、题目概述给定单链表,使每K个元素进行一次逆转,若剩余元素不足K个,不逆转二、思路1、利用algorithm库函数reverse(it1,it2)进行逆转;2、注意判断条件:仅i + K <=L.size()才执行逆转;3、测试点错误注意,给定结点中有不属于该链表的结点。三、代码#include <cstdio>#include <vector>#...原创 2020-01-17 10:56:12 · 98 阅读 · 0 评论 -
PAT A 1072 Gas Station (30分)
一、题目概述给定N个居民区和M个加油站备选址,即各点间的距离。在M个油站备选址中找到最合适的一处。油站选址标准:1、N个居民区都在服务范围内。2、距最短距离尽可能的远。3、若有另一油站距居民区最短距离相同,选择距离居民区平均距离最短的。二、思路1、关于图的建立(1)存储为邻接矩阵无向图,居民区下标1~N,油站下标N + 1 ~ N + M;(2)用string读入居民区或油站的下...原创 2020-01-16 19:09:41 · 115 阅读 · 0 评论 -
PAT A 1071 Speech Patterns (25分)
一、要点1、使用map<string, int>统计词的出现次数,然后取最值;2、注意cctype库中很多使用函数,如:isalnum()为字母数字、isdigit()为数字、isalpha()为字母、isupper()为大写字母、islower()为小写字母、toupper()转为大写字母、tolower()转为小写字母等等。3、读入单词部分: while( ( c =...原创 2020-01-16 17:45:03 · 231 阅读 · 0 评论 -
PAT A 1070 Mooncake (25分)
一、思路月饼按单价降序销售。测试点3错误:注意库存量应为浮点存储;二、代码#include <cstdio>#include <vector>#include <algorithm>using namespace std;typedef struct{ double amount, price;}item;int main(){...原创 2020-01-16 17:04:33 · 188 阅读 · 0 评论 -
PAT A 1069 The Black Hole of Numbers (20分)
一、思路一些int和string转换的方法1、string转int:(1)atoi(char*)(2)sscanf(char *, “%d”, &intager)从c字符串中读入整数;2、int转string:(1)to_string(int)(2)sprintf(str, “%d”, intager)将整数输出至c字符串;本体坑点总结:1、题目给出的输入未必是四位整数,...原创 2020-01-16 16:41:12 · 243 阅读 · 0 评论 -
PAT A 1067 Sort with Swap(0, i) (25分)
一、思路1、基本思路:模拟题目所述过程,每次使0与一个被0占据最终位置的元素交换,即交换一个元素至最终位置,从而使元素有序;2、一个问题:首先构造数组pos[N], pos[i]表示数字i所在的位置;按照如上方式不断交换,当pos[0]==0时,存在两种可能:(1)所有元素已经有序(2)有元素还不在最终位置,但pos[0]==0,无法继续进行交换;当情形(2)出现时,为获得最少交换...原创 2020-01-16 13:00:17 · 81 阅读 · 0 评论