![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
甲级
PAT甲级题目集解法
Michael_XCH
这个作者很懒,什么都没留下…
展开
-
PAT 1044 Shopping in Mars
关键要点:将这个数字序列转换成连续的求和序列sum[],所以这个求和序列sum[]必定是单增的。将寻找和值为S的连续子序列转化成寻找sum[i-1]+S的元素,如果存在,就找到对应右端点下标j;如果不存在,就找到第一个使和值大于S的右端点。#include<cstdio>const int N=100010;int nearS=100000010;int sum[N];//这里采用二分法//upperbound函数返回在[L,R)内第一个大于x的位置int upperboun原创 2020-05-18 15:14:59 · 118 阅读 · 0 评论 -
PAT 1010 Radix
解题思路:将字符’0-9’和’a-z’映射到数组上面定义字符串N转换成数的函数定义比较两个字符串N1和N2转换后的数值的函数编写二分查找函数,调用前面比较函数查找字符串N2中各个位数上最大数主函数里面确定N2的进制数最大和最小值关键点:进制数不止在0~35之间,可以非常大,超出int范围,所以建议使用 long long 作为数据类型。在进制转换的时候,注意数据可能会溢出,所以比较两个转化后的数据需要考虑溢出的情况。确定进制数是关键步骤,最小值应该就是N2各个位上最大值+1,最大值原创 2020-05-18 11:20:53 · 103 阅读 · 0 评论 -
PAT 1067 Sort with Swap(0, i)
这是一道很有意思的贪心算法题目。由于只允许与0交换,那么就应该交换不属于该位置的数据。这里就要考虑到0的位置问题,如果0不在0位,而在第i位,那么就应该与数字i所在位置进行交换。如果0在0位,先判断序列是否有序,再与第一个不在应在位置上的数字交换。算法步骤:构建poisition数组,存储相应数字的位置信息确定处于乱序的数字总数判断0是否在0位,若是,就交换第一个不在应有位置的数字;若不...原创 2020-01-22 18:34:14 · 94 阅读 · 0 评论 -
PAT 1033 To Fill or Not to Fill
这一题坑比较多,需要考虑很多细节。例如要考虑到起始station的距离为不为0,如果不为0,就要直接输出。还有要考虑到到最近的符合条件station的距离是否超出汽车行驶的最大距离。算法步骤:建立结构体存储station的信息构建比较函数将输入数据存储到station数组中根据距离进行排序循环遍历数组,获取最大行程范围内的最低价的station比较最低价和起始站点的价格。如果较低的...原创 2020-01-22 11:12:02 · 82 阅读 · 0 评论 -
PAT 1149 Dangerous Goods Packaging
这一题是关于hash的题目。题目本身不难,但是有地方要注意,一件物品可能与多个物品不兼容,这与以前类似的夫妇双方问题是不一样的。算法步骤:1.声明vector类型数组和布尔类型hash数组2.将输入数据存到vector数组中3.将输入进来的一组id存到临时数组中4.循环判断是否有两件不兼容的物品同时存在5.输出判断结果关键点:存储两件不兼容物品的信息不是像常规方法采用int数组,而...原创 2020-01-21 10:56:11 · 86 阅读 · 0 评论 -
PAT 1095 Cars on Campus
这一题基本算是PAT里面最难的排序题。它需要考虑的问题非常多,例如从一开始的结构体的设置,是应该考虑用record记录,还是用car存储信息。然后就会意识到后面要比较query的时间,所以还是用record记录比较方便。同时可以用map数据类型来存储car所停放的时间。算法步骤:建立结构体编写比较函数,分别比较record时间和car停放时间编写时间转换函数(用于比较时间)将输入数据存...原创 2020-01-16 09:29:49 · 73 阅读 · 0 评论 -
PAT 1080 Graduate Admission
这一题信息量比较大,不仅要对学生成绩进行排序,还要对学校所收录的学生id进行排序。另外,还要考虑到名次相同的学生必须被一块录取。算法步骤:建立结构体编写比较函数将输入数据存储到数组中排序记录学生名次遍历学生的选择,如果目标学校有名额,则互相选择,如果没有名额,则比较该学生选择的学校和前一个学生的录取学校,若两者一致,则将该学生分配给该学校按次序输出学校录取名单关键点:学校...原创 2020-01-15 16:50:23 · 71 阅读 · 0 评论 -
PAT 1075 PAT Judge
这一题我觉得做起来还比较麻烦,尤其是各种限制条件还比较多。首先要注意的是ID是连续的,不是像其他排序题那样随意给出,另外你要考虑到没submit答案的数据和submit但没complier成功的数据是不同的。尽管题目中说到题目都没有submit和submit但没complier成功的用户都是不允许出现在list里面,但是只要用户submit答案,那么他的记录就不会出现“-”的情况,所以说这两者并不...原创 2020-01-15 10:54:56 · 193 阅读 · 0 评论 -
PAT 1062 Talent and Virtue
这一题是比较简单的排序题,难点在于如何对 sage、nobleman、fool men进行排序。一开始我的想法是用多个数组进行分别存储,但是操作起来就变得繁琐,于是我看了别人的解法,设置标志就能轻松解决。算法步骤:建立结构体编写比较函数(注意对标志进行比较)将输入数据存储到结构体数组中同时对每一条数据设置标记对数组进行排序输出符合条件的数据在设置标记的过程中,我写的方法比较繁琐...原创 2020-01-14 21:18:08 · 137 阅读 · 0 评论 -
PAT 1016 Phone Bills
这一道题我是按着算法笔记上面来写的。题目信息比较繁杂,经过思考后我觉得可以分为以下几个步骤来写:建立结构体存储record记录。(基础) 对record的数组按照一定规则进行排序。(基础) 设置标志分割出同一个用户的所有record。(提高) 筛选不符合同时拥有上线和下线的记录。(难点) 在同一个用户所有符合条件的record遍历相邻的record。(提高) 根据分时段计费准确求...原创 2020-01-12 22:57:04 · 82 阅读 · 0 评论 -
PAT 1055 The World's Richest
这一题是比较普通的排序题,然而我在第一次做的时候,发现出现超时的情况。于是我又重新审查了一遍题目,发现了一条比较关键信息,就是输出的数据不能超过100条,这也是整道题的突破点。算法步骤:建立结构体 编写比较函数 新建结构体数组来存储并进行排序 筛选出每个年龄段前100个人,并将这些数据存储到另一个结构体数组中 针对每次query,循环遍历出符合条件的数据 处理输出数据为0条...原创 2020-01-14 18:24:16 · 132 阅读 · 0 评论