PAT
马铃薯小弟
这个作者很懒,什么都没留下…
展开
-
浙大 PAT 甲级 1065 A+B and C (64bit) long long方法是错误的
网上很多人用long long,通过分类讨论和溢出来判断,其实是不严谨了,可以AC是因为测点给的不到位。他们的思路是:如果一正一负,那么直接运算,结果和C比较。如果都为正,如果结果溢出(为负),那么一定大于C(因为C是long long范围内的数)。如果没有溢出,结果与C正常比较即可。如果都为负,如果结果溢出(为正),那么一定小于C(因为C是long long范围内的数)。如...原创 2019-08-29 17:33:03 · 175 阅读 · 1 评论 -
浙大 PAT 甲级 1079 Total Sales of Supply Chain 最简单的深度优先搜索 DFS
这几乎是PAT甲级练习题中最简单的一道DFS了…无需赘述,贴上代码供参考就好了。#include<stdio.h>#include<vector>#include<map>#include<math.h>using namespace std;vector<int> edge[100000];map<int, i...原创 2019-08-31 20:28:58 · 93 阅读 · 0 评论 -
浙大 PAT 甲级 1080 Graduate Admission 复杂排序
跟1075一样,在30分题里,这种排序是最容易的。没有苛刻的时间空间限制,不需要算法基础,直接将题意逐字逐句翻译成代码即可,常用的就是sort/vector/map/struct等,怎么方便怎么来,多定义些数据结构来简化思维,这种题套路非常固定。不需要动脑筋,只需要耐心细心就可以了。#include<stdio.h>#include<vector>#include...原创 2019-08-31 21:09:49 · 152 阅读 · 0 评论 -
浙大 PAT 甲级 1081 Rational Sum 分数运算 排错清单 错误原因
20分的题目里相对较难的一道,因为通过条件比较苛刻,需要考虑的细节太多。主要考察最小公约数、最小公倍数,是比较基础的,代码都只有一两行,下面列一下排错清单,如果有某些用例不能通过,可以看看是哪里出现的问题。1、长整型。程序中所有参与实际运算的变量都必须使用long long类型。请检查保存中间结果的变量是否为long long,检查求最小公约数的函数是否返回long long类型。2、...原创 2019-09-01 09:00:25 · 223 阅读 · 0 评论 -
浙大 PAT 甲级 1082 Read Number in Chinese 字符串截取 string
比较简单的一题,主要是测点不坑,都是正常的规范的数字。格式控制用了一个小trick,所有的单词后都加了一个空格,然后用string ans来保存。输出时只输出ans前 ans.size()-1 个字符即可,这样最后就不会有空格了。下面贴上AC代码#include<stdio.h>#include<string>#include<string.h>...原创 2019-09-01 09:51:10 · 112 阅读 · 0 评论 -
浙大 PAT 甲级 1083 List Grades
虽然这题是来搞笑的,但是也不能掉以轻心,我把NONE写成了None…也导致没有一次通过。#include<stdio.h>#include<stdlib.h>typedef struct Record{ char name[11]; char ID[11]; int grade;}*Recordptr;Recordptr reco...原创 2019-09-01 10:13:03 · 100 阅读 · 0 评论 -
浙大 PAT 甲级 1087 All Roads Lead to Rome 深度优先搜索 DFS
PAT甲级练习题已经出现过无数次类似的题目了,都是:找路径、择优条件。都用深度优先搜索来解决,出现次数多了之后就属于简单题了。#include<stdio.h>#include<vector>#include<map>#include<string>#include<memory.h>using namespace std...原创 2019-09-01 16:46:43 · 157 阅读 · 0 评论 -
浙大 PAT 甲级 1088 Rational Arithmetic 分数运算 long long int to string
分数运算,不难,但输出格式十分复杂,同时包含最大公约数和最小公倍数的考察。有一个小知识点,itoa可以将char* 转换成int ,ltoa可以将char* 转换成long ing,但这题的long long int好像没有对应的方法。可以改成sprintf(char* ans, "%lld", int x);#include<stdio.h>#include<s...原创 2019-09-01 19:50:52 · 108 阅读 · 0 评论 -
浙大 PAT 甲级 1089 Insert or Merge 插入排序 归并排序 题目错误
首先要说明的是,这题题目出错了,而我以为是我犯的错误,测试了几个小时都没有AC,我觉得我的时间真的白白浪费了。有一个测点是103 1 2 8 7 5 9 4 6 01 2 3 5 7 8 9 4 6 0题目对应输出应该为:Insertion Sort1 2 3 4 5 7 8 9 6 0但是,这题在连续两次的迭代过程中都是1 2 3 5 7 8 9 4 6 0,在5插入完成和9...原创 2019-09-01 21:26:44 · 229 阅读 · 0 评论 -
浙大 PAT 甲级 1090 Highest Price in Supply Chain 深度优先搜索 DFS
跟前面一道题很像,也是深度优先搜索,不再赘述。但是需要注意初始条件,也就是深搜前的目前最深层数和目前最深层数的人数这两个全局变量的初始条件,很重要,有两个用例考察的是这一点。要仔细考虑:1、如果只有一个人,最高售价(最深层数)、最高售价的人数输出是否正确。2、层数与售价的计算关系是否正确。下面贴上AC代码#include<stdio.h>#include<...原创 2019-09-01 22:38:31 · 125 阅读 · 0 评论 -
浙大 PAT 甲级 1078 Hashing 散列 二次探测法
首先要知道Quadratic probing的中文意思:二次探测法。二次探测法用于解决hash冲突问题,如果不清楚,可以翻阅《数据结构与算法分析 C语言描述》系统地复习一遍,会更有帮助。值得注意的是,二次探测法有可能插入失败,失败判断条件是增量i大于等于散列表的size,这个可以用公式证明。下面是插入的关键函数int insert(int x,int TSize){ i...原创 2019-08-31 19:12:28 · 458 阅读 · 0 评论 -
浙大 PAT 甲级 1077 Kuchiguse
读题目真是要笑死我了…太不正经了。很简单的20分~将题意翻译成代码即可。#include<iostream>#include<string>using namespace std;int main(){ int N; scanf("%d", &N); getchar(); string base; getlin...原创 2019-08-31 17:52:15 · 145 阅读 · 0 评论 -
浙大 PAT 甲级 1066 Root of AVL Tree 带有平衡条件的二叉查找树
本题直白地考查纯粹的数据结构知识,根据模板实现AVL树即可。对AVL树及其例程的介绍,目前找到的最清晰、易懂、完整的是《数据结构与算法分析-C语言描述》。// AVL 平衡二叉搜索树#include<stdio.h>#include<stdlib.h>#include<algorithm>struct AvlNode;typedef stru...原创 2019-08-29 20:59:24 · 118 阅读 · 0 评论 -
浙大 PAT 甲级 1067 Sort with Swap(0, i) 特殊的排序 详细过程
算法思路本题不难,下面说一下解题过程中的思路。首先,题目要求只能通过0与i交换来排序,根据样例可以断定,最快的方法是将0与0当前所在位置应该放置的数进行对换。例如:最开始{4, 0, 2, 1, 3},0在1号位置,那么将0与1对换Swap(0, 1) => {4, 1, 2, 0, 3}这样,1就完成了正确的摆放位置。现在,0在3号位置,那么将0与3对换Swap...原创 2019-08-29 23:08:42 · 169 阅读 · 0 评论 -
浙大 PAT 甲级 1068 Find More Coins 动态规划
这题和0-1背包问题很像,但增加了限制条件,满足准确值,而非求最大值。但动态规划这一基本思想都是适用的。定义了几个数据结构// 总金额为i的最大硬币数int dp[101];// 总金额为i,最大硬币数时的各硬币具体数量int ans[101][101];// 记录面值为i的硬币数int coins[101];// 记录能否达到总金额ibool mark[101];// ...原创 2019-08-30 11:04:22 · 138 阅读 · 0 评论 -
浙大 PAT 甲级 1071 Speech Patterns map的自定义排序 字符处理
本题考查字符处理,包括对单词的理解,是很常见的一道题。很容易想到用map存储,找到数量最多、单词词典顺序较小的那个词需要用到map的自定义排序。map的自定义排序是通过将map转换成vector<pair<temp1 temp2>>,然后使用sort函数处理的。关于map的排序可以参看https://blog.csdn.net/weixin_34212189/art...原创 2019-08-30 15:05:46 · 94 阅读 · 0 评论 -
浙大 PAT 甲级 1072 Gas Station Dijkstra算法 单源最短路径
这题比较难,考察最短路径,加了很多复杂的条件。第一步,读懂题意首先题意需要读懂,候选加油站需要满足以下条件:1、加油站离每个住宅的最短距离要在服务范围内;2、针对每个候选加油站,求出这个加油站到每个住宅的最短距离,这些最短距离中最小的那一个值,也就是离整个住宅区的最短距离,越大越好;3、如果有多个这样的候选加油站,那么针对每个候选加油站,求这个加油站到每个住宅的最短距离的和,最...原创 2019-08-30 20:58:02 · 227 阅读 · 0 评论 -
浙大 PAT 甲级 1073 Scientific Notation
我太难了…没有用string,而是用的C风格的字符串去写,本来就很麻烦了……然后有一个隐蔽地方有点逻辑错误,看了一晚上没有看出来,要不就是超时要不就是段错误,弄得我都迷茫了…太傻了,看了几个小时之后终于看出了。#include<stdio.h>#include<stdlib.h>#include<memory.h>using namespace ...原创 2019-08-30 22:45:51 · 119 阅读 · 0 评论 -
浙大 PAT 甲级 1074 Reversing Linked List 链表
本题中,每个节点中的next信息仅在将输入信息按顺序排列时有用,其他地方可以避免任何链表操作。是非常容易的25分~#include<stdio.h>#include<vector>#include<map>using namespace std;struct Node{ int address; int data; in...原创 2019-08-31 10:04:21 · 102 阅读 · 0 评论 -
浙大 PAT 甲级 1075 PAT Judge
这类不考察特定算法、只考察基础数据结构的题目某种程度上就是“翻译题”,没有无法下笔的情况,但一般规矩很复杂,想要拿满分很难,需要非常细心,代码也需要逻辑正确,考虑到各个方面。#include<stdio.h>#include<vector>#include<memory.h>#include<map>#include<algori...原创 2019-08-31 11:54:46 · 126 阅读 · 0 评论 -
浙大 PAT 甲级 1076 Forwards on Weibo 广度优先搜索 BFS
本题很显然需要用广度优先搜索BFS。有两点需要注意:1、whereM[i](≤100) is the total number of people thatuser[i]follows是follows,而不是be followed。2、存在互相follow的情况,但自己不能转发自己的,因此在一开始就要把帖子原作者标记掉,不参与转发。#include<stdio.h&...原创 2019-08-31 17:07:00 · 118 阅读 · 0 评论 -
浙大 PAT 甲级 1091 Acute Stroke 广度优先搜索 BFS
这题求一个M*N*L大小的长方体中的连续空间的总和,大小不小于L才算是一个连续空间。读完题目,就形成条件反射需要用BFS来解决。这题的BFS比较经典,不用多说,直接贴上代码~#include<stdio.h>#include<queue>using namespace std;bool mark[1286][128][60];int maze[1286...原创 2019-09-02 10:20:47 · 142 阅读 · 0 评论 -
浙大 PAT 甲级 1093 Count PAT's
一道简单题,每个A能够组成的PAT个数为它前面的P的个数乘以它后面的T的个数,然后把每个A能组成的PAT个数再加起来,就是总的PAT个数啦。定义一个数组cnt[100001][2],每个位置的0号元素为该位置前面P的个数,每个位置的1号元素为该位置前面T的个数。从前往后遍历一遍字符串可以得到每个位置前面P的个数,从后往前再遍历一遍可以得到每个位置后面A的个数,最后遍历一遍字符串为每个A能组成的PA...原创 2019-09-02 12:18:09 · 297 阅读 · 0 评论 -
浙大 PAT 甲级 1118 Birds in Forest 并查集
#include<stdio.h>#include<vector>using namespace std;int root[10001];int num;int findRoot(int x){ if (root[x] == -1) { return x; } else { int tm...原创 2019-09-05 15:16:34 · 158 阅读 · 0 评论 -
浙大 PAT 甲级 1123 Is It a Complete AVL Tree AVL树 层序遍历 完全二叉树
这题出的很经典,也很直白,考察三点:AVL树的构造、树的层序遍历、完全二叉树的判断。没想到不看书不上网这题居然被我搓出来了…本来AVL我已经忘得一干二净,但是之前有道题也考察了AVL,所以当时就顺带复习了一下,今天就写的很快很顺利了,果然刷题还是很有帮助的。#include<stdio.h>#include<algorithm>#include<stdl...原创 2019-09-05 19:54:42 · 175 阅读 · 0 评论 -
浙大 PAT 甲级 1125 Chain the Ropes 优先队列 最小堆 queue_priority 贪婪算法
思路很简单:每次找segments中最短的两截拿出来合成一截,然后当做一个新的segment放进去。最后只剩下一个segment时就是最终的longest rope。做法跟霍夫曼编码一模一样。是一道比较简单的贪婪算法,因为绳子每次进行拼接都会缩短一半,所以很显然越长的越放在最后,只用拼接一次,长度也只损耗一半。每次需要拿出最短的两截,很显然需要用到优先队列,即最小最大堆。C++的STL已经...原创 2019-09-05 20:58:01 · 239 阅读 · 0 评论 -
浙大 PAT 甲级 1126 Eulerian Path 并查集 欧拉路径 欧拉环路
这题非常简单,题目稍微复杂一些,但是实际上要做的工作很少也很直白。注意,在根据偶数度节点和奇数度节点判断是否为欧拉图之前,一定要用并查集检验一下是否为连通图。相信这题通过率只有0.2多可能就是因为很多小伙伴一开始遗漏了这一点。It has been proven that connected graphs with all vertices of even degree have an Eul...原创 2019-09-05 21:24:10 · 139 阅读 · 0 评论 -
浙大 PAT 甲级 1135 Is It A Red-Black Tree 红黑树的判断
#include<stdio.h>#include<math.h>#include<Windows.h>#include<stdlib.h>typedef struct Node* Tree;struct Node{ int key; Tree left; Tree right; bool red;};...原创 2019-09-06 20:59:29 · 228 阅读 · 0 评论 -
浙大 PAT 甲级 1139 First Contact
常规方法把题意翻译成代码即可,时间和空间范围足够,用set容器来加入和查找朋友。如果是后面三个测点没有通过,可能遗漏了一个细节:a和b也可能是朋友,但是c!=b,在遍历a的朋友时需要注意这一点。#include<stdio.h>#include<set>#include<vector>#include<algorithm>#incl...原创 2019-09-07 11:35:40 · 157 阅读 · 0 评论 -
PAT 甲级 1143 Lowest Common Ancestor
首先根据后序遍历构建BST,在构建BST时,每个节点的父节点也保存为该节点的信息。然后写函数实现BST的查找。准备工作完成后,开始读取输入数据寻找LCA。对于每组数据,先查找它是否存于BST中。如果都存在,那么写一个getLCA函数找到它们的LCA。首先我们用U表示这两个数中的较大一个,V表示这两个数中的较小一个。getLCA函数首先找到U在BST中的位置,因为V小于U,所以在U的左子树中...原创 2019-09-07 16:05:02 · 149 阅读 · 0 评论 -
浙大 PAT 甲级 1147 Heaps 堆 后序遍历 完全二叉树
完全二叉树可以用数组很好的表示,这题只用到堆的定义,关于堆的上滤、下滤操作等典型例程可以参照《数据结构与算法分析——C语言描述》系统复习。本题还考察如何根据完全二叉树的层序遍历来还原构建二叉树,以及后序遍历。#include<stdio.h>#include<queue>#include<vector>#include<stdlib.h>...原创 2019-09-07 16:57:33 · 152 阅读 · 0 评论 -
浙大 PAT 甲级 1151 LCA in a Binary Tree
思路和题1143一样,只不过寻找时不能再依靠BST的性质来判断左右子树,可以在构建树时将 该节点是父节点的左子树或是右子树这一信息保存在每个节点中。思路一样,但这题卡了很久…因为遗漏了一个细节,回溯时我只考虑了寻找父节点的左子树或右子树,而没有考虑到父节点就可能是我们要寻找的u或v。一直出现段错误,题1143也出现段错误,是因为没有考虑u,v相等且都为根节点的情况。总之,使用指针很容易...原创 2019-09-07 21:13:37 · 202 阅读 · 0 评论 -
浙大 PAT 甲级 1117 Eddington Number 规律
找到规律后非常简单。就是里程数大于i英里的天数大于等于i,输出最大的i即可。数组cnt[i]保存每英里的天数,比如6英里有两天,8英里有两天。然后从前加到后,这时数组里保存的就是里程数小于等于i公里的天数。里程数大于N的天数一律视作里程数N+1.然后用cnt[N+1]-cnt[i]得到里程数大于i英里的天数,与i作比较即可。时间复杂度为O(N)。#include<stdio...原创 2019-09-05 14:50:26 · 145 阅读 · 0 评论 -
[复习记录] 浙大 PAT 甲级 1111 Online Map 带有等长路径选择策略的、用邻接矩阵实现的disktra算法 DFS
#include<stdio.h>#include<vector>#define INF 10000000;using namespace std;int length[500][500];int time[500][500];int dis[500], dispre[500], timepre[500], weight[500];vector<i...原创 2019-09-05 10:06:55 · 134 阅读 · 1 评论 -
浙大 PAT 甲级 1094 The Largest Generation 广度优先搜索 BFS
#include<stdio.h>#include<vector>using namespace std;vector<int> relations[100];int bestLayer, bestNum;void BFS(int layer, vector<int> parent){ int num = 0; vec...原创 2019-09-02 12:43:30 · 89 阅读 · 0 评论 -
浙大 PAT 甲级 1095 Cars on Campus
一看到这题,不仅让我回想到被Table Tennis等等系列难题支配的恐惧…不过好在有了前面的经验,这题也相对简单,因此一遍AC。下面贴上AC代码#include<stdio.h>#include<vector>#include<map>#include<string>#include<string.h>#inclu...原创 2019-09-02 15:33:15 · 232 阅读 · 0 评论 -
浙大 PAT 甲级 1097 Deduplication on a Linked List 删除链表中重复元素
这题和前面很多题重复了,就不再多说了。STL用的好,可以减少很多思维复杂度,虽然代码可能不是很简洁,在机试时节约时间才是最重要的。这题唯一需要注意的时删除的元素可能为0个。另外,判断是使用绝对值判断,输出是输出的时原值。#include<stdio.h>#include<vector>#include<map>#include<set>...原创 2019-09-02 17:02:33 · 161 阅读 · 0 评论 -
浙大 PAT 甲级 1098 Insertion or Heap Sort 堆排序
知识点:插入排序和堆排序过程的理解、堆排序中下滤(Percolate Down)操作的实现。可以参照《数据结构与算法分析-C语言描述》(机械工业出版社)中优先队列和堆排序两节,进行系统复习。通过代码:#include<stdio.h>#include<algorithm>#define LeftChild(i) (2*(i)+1)using namesp...原创 2019-09-02 20:46:23 · 123 阅读 · 0 评论 -
浙大 PAT 甲级 1103 Integer Factorization DFS+剪枝
这题的超时弄得我要崩溃了…各种细节处的剪枝,不停剪了很多地方,依然超时。最后用整型数组代替了vector,通过。血泪教训,第二次了,超时的时候把vector换成原生数组会快好几倍。#include<stdio.h>#include<vector>#include<math.h>#include<memory.h>using namesp...原创 2019-09-03 14:53:31 · 185 阅读 · 0 评论 -
浙大 PAT 甲级 1104 Sum of Number Segments [有关乘法顺序的血泪教训]
真是信了邪,下面的代码死活AC不了,最后两个用例一直无法通过。#include<iostream>using namespace std;int main(){ int N; cin >> N; double ans=0.0; double a[100001]; for(int i=0;i<N;i++) { cin >> a[i...原创 2019-09-03 16:48:56 · 205 阅读 · 1 评论