PAT
Bazinga!
这个作者很懒,什么都没留下…
展开
-
PAT甲级1044 Shopping in Mars (25 分) 记录
题目 参考博客 思路分析: 首先的想法就是暴力求解,也就是遍历任意两点之间的元素和,找到最小的和。但是直觉告诉我这样做肯定会超时,所以我根本没写。 可以怎么改进?暴力解应该是O(n^3)的复杂度,其中有一轮循环时遍历i ~ j之间的元素。这一部分可以简化:在读入数据时顺便维持一个数组arr,该数组的每个元素存放从序列开头到该位置的元素和,这样i ~ j之间的元素和就可以直接用arr[j] - arr[i]求得。这样复杂度应该变为O(n ^ 2 + n) = O(n ^ 2)。 其实一般我能想到这里我就满足原创 2021-03-09 19:48:34 · 76 阅读 · 0 评论 -
PAT甲级1067 Sort with Swap(0, i) (25 分) 记录
题目 参考:PAT甲级1067 Sort with Swap(0, i):[C++题解]此题不是很懂!! 主要想梳理一下算法思路: step1:以0为哨兵,就交换0和0所在位置本来应该放的那个数,直到0就位 step2:仅有step1,可能会存在0已就位,但数组仍存在部分元素未就位。于是从下标为1开始遍历(经过step1,0肯定已经就位),找到第一个未就位的位置下标,交换0和此位置上的元素,接着按照step1进行下去,知道0再次就位。 终止条件:注意到step2中“找到第一个未就位的位置下标”,说明此位原创 2021-03-08 17:01:15 · 84 阅读 · 0 评论 -
PAT甲级1043 Is It a Binary Search Tree (25 分) 记录
题目 初始思路:根据先序遍历序列来建树,因为二叉搜索树本身的性质,确定根节点后,后面的序列一定是一部分小于根节点,一部分大于根节点,这样就天然完成了中序遍历的作用。树建好后,递归地判断是否统一的是左小右大或者左大右小。 困难之处:因为镜像也符合要求,所以判断函数很难写。代码(未完成,单纯记录)如下: #include<iostream> #include<vector> using namespace std; struct node { int val; node* lef原创 2021-02-18 21:22:36 · 92 阅读 · 0 评论 -
PAT1102 Invert a Binary Tree (25 分)记录
题目地址 思路很直接,从根开始,递归地交换左子树和右子树,然后进行层序和后序遍历。后来能通过题目给的用例,但是提交后只通过最后一个测试点。而且有个地方很奇怪,在VS运行所给的用例,能输出正确答案,但是在PAT的测试区却不行,而且输出一些很奇怪的数字: 后来发现invertBinaryTree函数非空情况未返回node指针(没写return),修改后AC。 经验: 出现奇怪的数字,有一种可能是本应该是有效数据却为空。 递归函数在开头处理特殊/终止情况,这里要考虑清楚,容易出错。 代码如下: #incl原创 2021-02-04 21:23:40 · 112 阅读 · 0 评论 -
PAT甲级1081 Rational Sum (20分)记录
题目 我的结果 第一次提交,通过1、2、3测试点,4运行超时,5浮点错误 改正:每加一次就对分数进行化简,而不是所有都加完后再化简。 第二次提交,1、2、3、4通过,5运行超时 没调试出来,而且发现存在输出负号在分母上的bug 我的代码如下 #include<iostream> #include<vector> using namespace std; struct node { long long numerator, denominator; }; //计算两个分数相加原创 2021-01-30 11:49:14 · 127 阅读 · 0 评论 -
PAT甲级1017 Queueing at Bank (25分) 最后一个测试点未通过
代码如下,看了柳神的代码,思路是一样的,但是找了很久也不知道最后一个点为什么没过。希望有过路的大佬帮我看一下。 #include<iostream> #include<algorithm> using namespace std; struct customer { int arrive_t; int need_t; int serve_start; }; customer customers[10000]; int windows[100]; //记录每个窗口空闲的时间原创 2021-01-26 16:38:33 · 339 阅读 · 1 评论 -
PAT甲级 1032 Sharing (25分) 测试点5陷阱
题目 1032 Sharing 分析 suffix是后缀,题目的意思是求两个单词的公共后缀的第一个字符的地址。我看有些博客说求的是首个共用结点的地址,我觉得是不对的。 晴神/柳神的解法,是把第一个单词中出现的字母标记,然后遍历第二个单词,出现的首个标记的字母的地址,即为所求。能这样做是因为,只要遇到了某个相同的字母,后面的就一定相同,比如样例1中,只要遇到了a,那么后面的过程都是相同的: a(00010) -> D(12345) -> i(67890) -> n(00002) ->原创 2020-07-21 00:13:00 · 434 阅读 · 2 评论 -
PAT 甲级 1051 Pop Sequence (25分)
此题好像是浙大数据结构慕课上面的课后编程作业。 思路是模拟栈的运行。每读一个数,就将他和当前栈顶的数比较,如果不相等,就从1开始往栈里push,直到当前栈顶元素和当前所读元素相等,相当于当前所读元素匹配成功。匹配成功后,就弹出栈顶元素,读下一个元素。 设置一个flag来标识匹配不成功的情况 当push到栈里的数超过了序列长度,即如果序列长度为7,那么你只能将1~7push进栈。 stack的size超过了限制。 代码如下: #include<iostream> #include<sta原创 2020-07-18 23:06:09 · 164 阅读 · 0 评论 -
PAT 乙级 1009说反话
题目描述: 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。 输出格式: 每个测试用例的输出占一行,输出倒序后的句子。 输入样例: Hello World Here...原创 2020-03-06 15:28:11 · 124 阅读 · 0 评论 -
PAT乙级1003我要通过
题目描述 “答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确” 大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。 得到“答案正确 ”的条件是: 字符串中必须仅有 P、A、T这三种字符,不可以包含其它字符; 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串; 如果...原创 2020-02-28 11:47:10 · 79 阅读 · 0 评论