PAT
记录PAT题解
_Kirito
计算机考古党,致力于挖穿计算机的祖坟。
展开
-
PAT A1149 Dangerous Goods Packaging (25分)(C++)
实话实说,这个题目本身并不算是太难,主要考察散列表,题目的目标是获得更快的查找速度。 下面博主就来说说我做这个题目的过程: 审完题,第一反应就是建立一个散列表来进行危险列表的存储,然后再逐个构建运输物品列表来进行判断。 刚开始没有考虑到一个物品可以与多个物品发生反应,因此使用了一对一模式,结果错了一片,不过想想也是, 于是就将对应模式改为了一对多,为了提高效率,map被我换成了一个大型数组,然后每个数组的元素是一个set。 列表建好了,就是核对每个运输列表是否合规了,首先使...原创 2020-11-22 00:58:45 · 291 阅读 · 1 评论 -
PAT A1104 Sum of Number Segments (20分)(果然20分的题目最可怕了-C++)
这个题目根本就不是一个编程题,硬说的话,当公务员考试的规律题还挺不错的。 首先,我是把它当编程题做的,暴力求解,结果后两个点超时。 然后,稍微优化了一下,修改成了二重循环,结果还是后面两个点超时。 我陷入了沉思,这个题果然有坑,我想肯定有规律。 于是我在草纸上列举了几个情况(为了方便就用1 2 3 4 5...代替了,题目中是不超过1的小数)。 第一个例子 输入 4 1 2 3 4 计算过程需要加的数字 1 1 2 1 2 3 1 2 3 4 2 2 3 2 3 4 ...原创 2020-10-16 00:53:23 · 167 阅读 · 2 评论 -
PAT A1106 Lowest Price in Supply Chain (25分)(DFS另类解法)
首先说明一下,这个题目其实使用树的层序遍历或者图广度优先遍历是更好的解法。当然DFS加剪枝也是可以的。而下面这个是原始的DFS。它真的会不遗余力地遍历所有的分支。 但是,可能是由于PAT测试点的条件过于宽松,导致这种代码也全通了。 下面上代码(注意DFS过程中不能使用价格来进行判断,因为如果将经手利率设置为0,会导致输出所有的零售商,我第一次测试点4没过就是这么被坑了。) #define _CRT_SECURE_NO_WARNINGS #include &l...原创 2020-10-03 00:25:22 · 123 阅读 · 0 评论 -
PAT A1087 All Roads Lead to Rome (30分)(迪杰斯特拉变体应用,梅开二度)
这里只说明关键部分。 有三个优先级,由高到低分别是: 距离、高兴值、平均高兴值。 距离即是最普通的Dijkstra所求的目标。 高兴值是点权变体之一。 平均高兴值可化为求最短路径中的最少结点路径,也属于点权变体之一。 在更新结果的代码中,优先级高的更新的结果要更多。 所有优先级低的更新时必须保证比它更高优先级的结果是一致的。 下面放代码:(PS,怎么感觉最近这么多Dijkstra。。。) #define _CRT_SECURE_NO_WARNINGS #include<iostre原创 2020-09-03 18:22:37 · 108 阅读 · 0 评论 -
PAT A1111 Online Map(迪杰斯特拉变体应用) (30分)
首先感谢柳神(她的题解) 根据柳神的思路,我自己写了一遍,分了不同的模块。显得更加条理一些 第一步,建图。 第二步,使用加边权变体迪杰斯特拉算法求解最短路中的花费时间最少的路径。 第三步,使用加点权变体迪杰斯特拉算法求解最快路中的经由结点最少的路径。 第四步,递归方式找出路径。 第五步,根据路径的结果以不同的形式输出。 代码: #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<sstream> u原创 2020-08-29 15:17:32 · 139 阅读 · 0 评论 -
PAT A1099 Build A Binary Search Tree(二叉树遍历方式的考查) (30分)
思路: 第一步:建树 第二步:将输入的结点升序排序 第三步:中序遍历树,依次填入排好序的结点 第四步:层序遍历树,输出结果 #include<algorithm> #include<iostream> #include<queue> using namespace std; const int M = 110; int n, nodes[M][3], v[M]; void initTree() { cin >> n; for (int i =原创 2020-08-27 15:54:02 · 118 阅读 · 0 评论