PAT甲级
Apollo-yyy
考研失败的华子5G工程师一枚
展开
-
1099 Build A Binary Search Tree
题目大意:输入一棵二叉查找树和n个数据,把这n个数据放入这颗树中,输出层次遍历序列。解题思路:按照二叉查找树中序遍历的特点(数据从小到大)得到二叉树的中序编号序列并把数据排序后对应插入到节点相应的下标,然后BFS输出层次遍历序列结果。代码如下:#include<iostream>#include<cstdio>#include<fstream>...原创 2019-02-14 17:09:31 · 389 阅读 · 0 评论 -
1100 Mars Numbers
题目大意:如果给的是地球数字就要翻译成火星数字,否则翻译成地球数字,火星数字是13进制数。解题思路:由于给定数字范围为0-169,不包括169,也就是13*13-1( jou dec),所以对于火星翻译成地球可以直接截取字符串长度来截取对应的字符串然后翻译。需要注意的是13的倍数是一种特殊情况,只占一位数而没有后面的0(tret)。代码如下:#include<iostream&g...原创 2019-01-30 15:32:15 · 221 阅读 · 0 评论 -
1071 Speech Patterns
题目大意:找出一段文本中出现次数最多的单词和出现次数,如果有次数相同的则输出字典序最小的。所谓单词是指字母或者字母和数字的组合。字母不区分大小写。解题思路:map标记单词模拟即可。代码如下:#include<iostream>#include<cstdio>#include<fstream>#include<set>#includ...原创 2019-01-30 16:25:30 · 219 阅读 · 2 评论 -
1136 A Delayed Palindrome
题目大意:判断一个字符串是否是回文串,不是就和它的倒置字符串相加,直到结果是回文串为止。如果这样的操作进行十次后还不是回文串,那么就输出“Not found in 10 iterations.”。解题思路:用字符串模拟大整数相加即可。代码如下:#include<iostream>#include<cstdio>#include<cstring>...原创 2019-02-22 09:53:58 · 198 阅读 · 0 评论 -
1137 Final Grading
题目大意:每个学生有四个成绩,线上成绩,期中,期末,总分。现在分别给出这四门成绩下对应的学生分数情况。要求按照总分从大到小(分数相同则按照ID字典序升序)输出总分及格(>=60分)的学生成绩情况。线上成绩必须不小于200分。解题思路:用MAP给每名学生分配唯一的编号方便用结构体保存信息并排序,输入时对于线上成绩小于200的学生不保存。代码如下:#include<iostre...原创 2019-02-22 10:11:24 · 378 阅读 · 0 评论 -
1138 Postorder Traversal
题目大意:给出二叉树前序遍历和中序遍历,要求输出后序遍历第一个数。解题思路:用前序和中序构建二叉树时递归返回的第一个节点就是后序遍历的第一个数。代码如下:#include<iostream> using namespace std;int in[50010],pre[50010],n;struct node{ int data; node* lchild; n...原创 2019-02-22 11:29:17 · 271 阅读 · 0 评论 -
1068 Find More Coins
题目大意:EVa有一些面值的硬币,现在要求支付具体数额的硬币,要求输出需要支付的硬币序列,如果存在多个解就输出字典序最小的,这里的字典序就按照字符串比较时的字典序就可以。解题思路:01背包问题。这里将朴素的背包中的重量和价值合并处理。难点在于记录路径和字典序问题,可以开一个和DP数组维度相同含义的二维数组来记录选择的硬币,由于存在多个解并且要求输出字典序最小,首先将输入的数组从大到小排序,...原创 2019-02-11 10:33:21 · 336 阅读 · 0 评论 -
1020 Tree Traversals
题目大意:给你二叉树结点数和后序,中序遍历结果,要求输出层次遍历的结果。解题思路:二叉树板子题,根据后序中序构建二叉树,然后通过BFS遍历输出层次序列即可。代码如下:#include<iostream>#include<cstdio>#include<fstream>#include<set>#include<cmath&g...原创 2019-02-12 16:51:01 · 271 阅读 · 0 评论 -
1086 Tree Traversals Again
题目大意:用栈的输出表示二叉树的中序遍历,要求输出二叉树的后序遍历序列。解题思路:题目隐含了入栈的顺序就是先序遍历的序列,根据这个构建出二叉树然后后序输出即可。代码如下:#include<iostream>#include<cstdio>#include<fstream>#include<set>#include<cmath...原创 2019-02-12 16:55:12 · 439 阅读 · 0 评论 -
1102 Invert a Binary Tree
题目大意:n个节点,依次给出每个节点的左右孩子节点下标,如果没有孩子用‘-’代替,要求从右到左输出层次遍历序列,然后输出翻转二叉树后的中序遍历。解题思路:使用静态链表构建二叉树,标记每一个孩子节点从而找出总的根节点,然后BFS输出层次遍历。中序遍历可以提前交换节点并保存在节点结构体中,正常输出中序遍历即可。代码如下:#include<iostream>#include&l...原创 2019-02-12 17:42:13 · 266 阅读 · 0 评论 -
1053 Path of Equal Weight
题目大意:给一棵结点数为n,非叶结点数为m的树,然后给一个权值s。接下来给出n个结点的权值(顺序就是结点ID编号),依次给出m个父节点的子节点编号,要求按照从大到小的顺序(按字典序理解)输出路径权值和为s的路径结点。解题思路:这个题用DFS或者记忆化DP都可以写,这里给出DFS的方法,用一个vectot保存路径,关于输出字典序有个小技巧,就是在给父节点输入子节点的时候,可以按照权值大小排序...原创 2019-02-13 10:56:04 · 177 阅读 · 0 评论 -
1054 The Dominant Color
题目大意:找出现次数超过总数一半的那个数。解题思路:方法很多,我这里直接用MAP标记模拟了。代码如下:#include<iostream>#include<cstdio>#include<fstream>#include<set>#include<cmath>#include<cstring>#incl...原创 2019-01-30 15:21:54 · 312 阅读 · 0 评论 -
1097 Deduplication on a Linked List
题目大意:给你一个链表。只保留第一个出现的且节点键值的绝对值不重复的节点(比如15——(-15)只保留15,-15删除),被删除的节点依次构建一个新链表。最后输出删除后得到的链表和被删除节点组成的新链表。解题思路:想了一种投机取巧的方法,就是用动态数组保存节点,被删除的节点放在一个新的数组中,这样无需构建链表和操作指针,非常容易理解。代码如下:#include<iostream&...原创 2019-02-09 17:17:30 · 314 阅读 · 1 评论 -
1039 Course List for Student
题目大意:N名学生和K门课程,分别给出每门课程下选课学生的名字,查询每名学生选了多少门课程以及课程的编号,课程的编号要按照升序输出。解题思路:这个题难点在于如何用唯一的数字标记学生的名字。也就是设计哈希函数。如果用MAP来分配学生名字的标号的话最后一个样例过不去,不是段错误就是什么运行错误。。。由于每名学生的名字由3个大写字母和1个数字组成,可以设计一个简单的哈希函数,如果是字母的话按照2...原创 2019-01-29 10:18:35 · 398 阅读 · 0 评论 -
1047 Student List for Course
题目大意:与1039的要求正相反,给你每名学生的选课情况,要求分别输出每门课程选课人数以及选课学生的名字,名字要按照字典序排序。解题思路:比1039容易多了,由于每个人的名字唯一且顺序输入,分别用1-N标记即可。值得注意的是由于输入输出量大,只能用SCANF输入,那么就只能用二维字符数组保存学生的名字,则第一个维度的下标唯一指向一个学生。代码如下:#include<iostrea...原创 2019-01-29 10:42:07 · 205 阅读 · 0 评论 -
1107 Social Clusters
题目大意:n个人,每个人都有k个兴趣,后面是兴趣种类的编号。有相同兴趣的两个人放到一个组里,两两组之间的人没有任何相同的兴趣,要求输出兴趣组数并按照非递增顺序输出兴趣小组的人数。解题思路:并查集的模板题,通过判断两个兴趣集合是否有交集判断这两个人是否属于同一组,开一个数组记录每棵树下的节点数量,在合并子节点时修改对应树的节点数量。代码如下:#include&lt;iostream&gt...原创 2019-02-14 22:07:22 · 367 阅读 · 0 评论 -
1063 Set Similarity
题目大意:计算两个集合的相似度,相似度定义为(两集合交集元素数量)/(两集合并集元素数量)。解题思路:就是STL set函数的运用,如果采用循环得到并集最后一个样例会超时。这里要用到set_union()函数,得到的结果保存在数组中而不是集合。至于交集元素的数量可以通过集合合并前后元素数量相减得到。代码如下:#include&lt;iostream&gt;#include&lt;cs...原创 2019-01-29 17:51:24 · 268 阅读 · 0 评论 -
1052 Linked List Sorting
题目大意:给输入的列表进行排序。解题思路:一开始直接就拿结构体排序做了,一边写一边怀疑题目和链表有啥关系,然后有两个测试点过不去。之后意识到可能输入的节点有的不在给定头指针开始的链表上,于是开了一个结构体保存筛选过后的节点,继续结构体排序。注意有可能一个有效节点也没有,那么就只输出“0 -1”。代码如下:#include<iostream>#include<cstd...原创 2019-02-07 21:29:48 · 188 阅读 · 0 评论 -
1074 Reversing Linked List
题目大意:给你一个链表,每隔k个节点翻转一下,输出翻转后的结果。解题思路:如果链表的长度正好是K的整数倍则全部要分段翻转,否则末尾的余数部分无需翻转。重点是翻转部分首尾指针的修改,可以定义一个变量保存未翻转前尾指针的下一个节点地址,每间隔K个节点修改首指针的指向地址。其他节点就反向修改即可。代码如下:#include<iostream>#include<cstdio...原创 2019-02-08 11:33:04 · 260 阅读 · 0 评论 -
1098 Insertion or Heap Sort
题目大意:给你初始序列和一段经过部分排序后的序列,问是经过了堆排序还是插入排序,输出排序方式并输出该排序下的下一步的输出序列。解题思路:模拟堆和插入排序的步骤即可,插入用sort更方便一些。每次完成一步后和目标序列进行比较,相同就再进行一步然后返回输出即可。代码如下:#include<iostream>#include<cstdio>#include<...原创 2019-02-15 21:51:44 · 204 阅读 · 0 评论 -
1056 Mice and Rice
题目大意:Np只老鼠,每Ng只分为一组选出体重最大的进入下一轮,最后不够Ng也组成一组。直到选出第一名。输出每只老鼠的排名。解题思路:老鼠分组指令可以用队列保存,我用了两个队列互相转换。一开始死活没想出来排名怎么得到,后来一看排名是分组数+1。emmm,还是没想明白为什么啊。。。代码如下:#include<iostream>#include<cstdio>#...原创 2019-02-08 23:09:37 · 229 阅读 · 0 评论 -
1007 Maximum Subsequence Sum
题目大意:最大子序列和,经典DP板子题,DP数组表示以I为结尾的最大和,状态转移方程为 DP[i]=max(DP[i-1]+data[i],data[i])。注意如果都是负数输出-1.代码如下:#include<iostream>#include<cstdio>#include<fstream>#include<set>#includ...原创 2019-02-09 11:17:34 · 143 阅读 · 0 评论 -
1040 Longest Symmetric String
题目大意:输出一个字符串中最长回文串的长度。解题思路:一开始暴力写了一发,枚举起点然后扩展字符串判断是否是回文串,但这种方法本质上不包含长度为偶数的回文串,虽然各种骚操作弄了半天但是还是有一个两分的测试点过不去。无奈只好用DP写,DP数组为DP【i】【j】,含义为从i到j的字符串是否为回文串。状态转移方程为DP【i】【j】=(DP【i+1】【j-1】,条件s【i】==s【j】。否则不是回文...原创 2019-02-09 17:06:04 · 417 阅读 · 0 评论 -
1124 Raffle for Weibo Followers
题目大意:m条微博转发记录,第一个获奖者编号为s,每间隔n个就是下一个获奖者。但是没人只能拿一次奖,如果当前位置的人已经拿过了就向下顺延。解题思路:小模拟。代码如下:#include<iostream>#include<cstdio>#include<cstring>#include<map>using namespace std...原创 2019-02-24 10:53:52 · 212 阅读 · 0 评论 -
1125 Chain the Ropes
题目大意:两个绳子结合成一个绳子总长度会减半,现在给你n条绳子把他们连接成一条,输出最长的方案的长度。解题思路:排序,从小到大一个一个连就好了,因为从小到大连损失的长度最少。、代码如下:#include&lt;iostream&gt;#include&lt;cstdio&gt;#include&lt;algorithm&gt;using namespace std;int原创 2019-02-24 10:58:13 · 204 阅读 · 0 评论 -
1127 ZigZagging on a Tree
题目大意:给定二叉树的中序和后序遍历,输出“层次”遍历,这个层次遍历从根节点的子节点开始,先从左到右输出,然后从右到左输出。。。循环往复。解题思路:这个题我写的复杂了一点,关于输出哪里我用了两个双端队列模拟了输出的扩展情况,即从左到右和从右到左,所以代码较难理解。维护一个度参数根据奇偶度判断是从右到左还是从左到右输出会方便很多。代码如下:#include<iostream>...原创 2019-02-24 11:28:36 · 288 阅读 · 0 评论 -
1147 Heaps
题目大意:判断一个完全二叉树是最大堆还是最小堆还是不是堆,然后输出后序遍历的结果。解题思路:根据最大最小堆的定义一次判断父节点和子节点的关系并记录,如果记录出现冲突说明不是一个堆,否则就输出记录的结果,最后输出后序遍历。代码如下:#include&lt;iostream&gt;#include&lt;cstdio&gt;#include&lt;fstream&gt;#inclu原创 2019-02-20 11:02:00 · 281 阅读 · 0 评论 -
1112 Stucked Keyboard
题目大意:键盘上有的键有问题,按一下在屏幕上连续显示k个,现在给你一个文本串,按照查找顺序输出有问题的按键,并且还原原始文本串。解题思路:遍历,将没有连续出现k次或是k的整数倍次的字符标记,没被标记的就是有问题的。然后再扫一遍将有问题的键存入数组,输出的时候到达有问题的键就跳过k个继续输出即可。代码如下:#include<iostream>#include<set&...原创 2019-02-25 22:26:05 · 235 阅读 · 0 评论 -
1113 Integer Set Partition
题目大意:把n个数划分成两个集合,要求两个集合内部数总和的差值最大,集合大小的差值最小。解题思路:水题,排序分两边。代码如下:#include<iostream>#include<cstdio>#include<algorithm>#include<set>using namespace std;int main(){ in...原创 2019-02-25 22:30:01 · 208 阅读 · 0 评论 -
1115 Counting Nodes in a BST
题目大意:数一个BST(二叉查找树)最后两层节点的数量。解题思路:维护一个深度参数,建树时记录下最大深度然后BFS遍历统计即可。代码如下:#include<iostream>#include<algorithm>#include<cstdio>#include<queue>using namespace std;int n,ma...原创 2019-02-25 22:34:55 · 287 阅读 · 0 评论 -
1148 Werewolf - Simple Version
题目大意:一个狼人杀游戏,已知肯定有两头狼,其中有一头说谎,然后平民里也有一个说谎,要求找出这两头狼的编号,如果存在多个解输出字典序最小的。解题思路:由于数据量并不大直接暴力枚举两头狼的编号即可,维护一个身份数组,在枚举狼时将对应的下标下的数组值变为-1,其他下标是1。然后遍历每个人说的话,如果出现矛盾(所说的人的身份和我们ID数组中对应的矛盾)说明这个人说谎,将说谎人的编号保存下来,如果...原创 2019-02-25 22:45:52 · 269 阅读 · 0 评论 -
1120 Friend Numbers
题目大意:求出每一个数的各个位数相加和,去重后从小到大输出。解题思路:模拟+set代码如下:#include<iostream>#include<cstdio>#include<map>#include<set>#include<algorithm>using namespace std;map<int,in...原创 2019-02-26 11:00:08 · 198 阅读 · 0 评论 -
1121 Damn Single
题目大意:给出n对情侣编号,然后给m个参加聚会的人的编号,输出单身狗的编号(有CP但是CP不在聚会上也算)。解题思路:STL模拟,需要注意一下编号为0的情况,因为用map标记初始化的时候都是0。代码如下:#include<iostream>#include<cstdio>#include<set>#include<vector>#...原创 2019-02-26 11:05:51 · 267 阅读 · 0 评论 -
1122 Hamiltonian Cycle
题目大意:给一个无向图,然后查询k个环,问是不是哈密尔顿环(一个环遍历图上所有点有始有终且不重复访问)。解题思路:用set判断是否有重复访问的节点(起点终点例外),记录起点和终点比较判断能否走出一个环,用vector记录上一个节点判断当前节点是否可以访问到(存不存在路径)。代码如下:#include<iostream>#include<map>#includ...原创 2019-02-26 11:13:33 · 446 阅读 · 0 评论 -
1110 Complete Binary Tree
题目大意:判断是不是完全二叉树,是则输出最后一个节点的下标,否则输出根节点下标。解题思路:一开始从输入上投机(只有右子没有左子肯定不是,只有左子没有右子但是数量超过2也不是),只拿到18分(忽略了右子树饱满没有左子树的情况)。正确的做法是维护一个下标参数(指完全二叉树结点与位置对应关系),DFS遍历树,如果最大结点的编号正好等于最大的下标证明是一个完全二叉树,否则必然有空缺的位置(该下标下...原创 2019-02-27 10:50:10 · 631 阅读 · 0 评论 -
1132 Cut Integer
题目大意:把一分偶数长度的数M切成两段a,b,如果M%(a*b)==0就输出Yes,否则输出No。解题思路:模拟即可。代码如下:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;long long ...原创 2019-02-27 10:53:23 · 303 阅读 · 0 评论 -
1144 The Missing Number
题目大意;给n个数字,找到不在这个数字列表里面的最小的正整数.解题思路:这题做法很多,我这里为了熟悉一下STl用了SET去重加vector排序,也可以直接用数组标记然后遍历就可以。代码如下:#include<iostream>#include<cstdio>#include<fstream>#include<set>#includ...原创 2019-02-20 10:38:38 · 239 阅读 · 0 评论 -
1146 Topological Order
题目大意:给出一个有向无环图(DAG),然后给出K个拓扑排序序列,判断哪些序列不是拓扑序列,不是拓扑排序的序列将编号输出。解题思路:拓扑排序的思想是将每个入度为0的节点所有的出边顶点的入度都减1,直到减为0就将该点加入拓扑序列中。按照这个思想反过来验证给出的序列的正确性,如果当前点的入度为0,就松弛所有出边点的入度,否则就不是拓扑序列。代码如下:#include<iostream...原创 2019-02-20 10:31:05 · 341 阅读 · 0 评论 -
1155 Heap Paths
题目大意:判断一个完全二叉树是不是堆,是最大堆还是最小堆,并且从右到左输出它的每一条路径。解题思路:DFS遍历+数组记录路径即可。代码如下:#include<iostream>#include<cstdio>#include<vector>#include<algorithm>using namespace std;int n,...原创 2019-02-24 11:38:11 · 287 阅读 · 0 评论 -
1076 Forwards on Weibo
题目大意:在微博中,每个用户都可能被其他若干用户关注。每当该用户发布一条信息时,他的关注者就可以看到这条信息并选择是否转发它,且转发的信息也可以被转发者的关注者再次转发,但同一用户最多只转发该信息一次(信息的最初发布者不能转发该信息)。现在给出N个用户的关注情况(即他们各自关注了那些用户)以及一个转发层数上限L,并给出最初发送消息的因户编号,求在转发层数上限内消息最多会被多少用户转发——摘自《...原创 2019-02-19 10:31:04 · 218 阅读 · 0 评论