PAT甲级真题题解
文章平均质量分 56
ff
SYaoJun
这个作者很懒,什么都没留下…
展开
-
PAT甲级题解
1001 A+B Format (20 分)1002 A+B for Polynomials (25 分)1003 Emergency (25 分)原创 2019-08-29 23:04:57 · 665 阅读 · 0 评论 -
7-4 Cartesian Tree (30分)
A Cartesian tree is a binary tree constructed from a sequence of distinct numbers. The tree is heap-ordered, and an inorder traversal returns the original sequence. For example, given the sequence { 8...原创 2019-12-08 08:25:56 · 305 阅读 · 0 评论 -
7-3 Summit (25分)
A summit (峰会) is a meeting of heads of state or government. Arranging the rest areas for the summit is not a simple job. The ideal arrangement of one area is to invite those heads so that everyone is ...原创 2019-12-08 08:23:28 · 203 阅读 · 0 评论 -
7-2 Block Reversing (25分)
Given a singly linked list L. Let us consider every K nodes as a block (if there are less than K nodes at the end of the list, the rest of the nodes are still considered as a block). Your job is to re...原创 2019-12-08 08:18:34 · 233 阅读 · 0 评论 -
7-1 Good in C (20分)
When your interviewer asks you to write “Hello World” using C, can you do as the following figure shows?Input Specification:Each input file contains one test case. For each case, the first part giv...原创 2019-12-08 08:14:44 · 395 阅读 · 0 评论 -
1119 Pre- and Post-order Traversals (30分)
参考代码先存着吧,以后再慢慢理解,稍微加了一点注释。柳神代码利用前序和后序判断这颗二叉树是否唯一,输出任一中序遍历。主要是左右子树的划分。除了叶子节点外,只有一个孩子节点则会导致不唯一。#include <iostream>#include <vector>using namespace std;vector<int> in, pre, pos...原创 2019-12-05 22:24:40 · 64 阅读 · 0 评论 -
1139 First Contact (30 分)
//26分 最后一个测试点超时#include <cstdio>#include <cmath>#include <iostream>#include <string>#include <vector>#include <cstring>#include <algorithm> #include &...原创 2019-12-05 11:53:22 · 208 阅读 · 0 评论 -
1003 Emergency (25 分)
#include&lt;bits/stdc++.h&gt;using namespace std;const int maxn=505;const int INF = 1e9+5;int N,M,C1,C2,c1,c2,L;int weights[maxn],w[maxn]; //点权值 和 每个顶点的最大点权 int G[maxn][maxn]; //邻接矩阵图 int d[...原创 2019-01-29 23:06:45 · 150 阅读 · 0 评论 -
1149 Dangerous Goods Packaging (25 分)
版本1map映射和遍历耗时14分钟#include <cstdio>#include <cmath>#include <iostream>#include <string>#include <vector>#include <cstring>#include <algorithm> #inclu...原创 2019-12-03 21:02:07 · 132 阅读 · 0 评论 -
1116 Come on! Let's C (20 分)
版本1注意: 不存在的数据,就算查询过的,但是不能输出checked,而要继续输出 are you kidding?注意整型要保证输出结果为4位数,前导零需要补上。#include <cstdio>#include <cmath>#include <iostream>#include <string>#include <vecto...原创 2019-12-03 19:15:58 · 119 阅读 · 0 评论 -
1125 Chain the Ropes (25 分)
版本1这道题利用了哈夫曼树的性质,但是类型是double型的。输出结果的时候,是向下取整。#include <cstdio>#include <cmath>#include <iostream>#include <string>#include <vector>#include <cstring>#inclu...原创 2019-12-03 16:48:51 · 106 阅读 · 0 评论 -
1140 Look-and-say Sequence (20 分)
知识点:字符串 双指针版本1耗时6分钟注意使用双指针的时候,更新下标的方式。#include <cstdio>#include <cmath>#include <iostream>#include <string>#include <vector>#include <cstring>#include <...原创 2019-12-03 08:40:49 · 77 阅读 · 0 评论 -
1141 PAT Ranking of Institutions (25 分)
知识点:排序题版本1耗时46分钟注意score必须是按照整型排序,而不是浮点数排序。不然最后一个测试点会出错。#include <cstdio>#include <cmath>#include <iostream>#include <string>#include <vector>#include <cstring...原创 2019-12-03 08:31:10 · 92 阅读 · 0 评论 -
1153 Decode Registration Card of PAT (25 分)
版本1这个题,怎么说呢?巨TM恶心不过分吧。排序尽量用结构体吧,vector靠不住。今天不是type==3的时候,我偏要用vector保存pair类型来排序,不然早就过了。还有就是字符转数字的时候没有减去字符0,导致直接算的ASCII码值。#include <cstdio>#include <cmath>#include <iostream>#in...原创 2019-12-02 23:16:08 · 127 阅读 · 0 评论 -
1152 Google Recruitment (20 分)
版本1截取N位长的数字,判断是否为素数。主要不用直接用cout输出substr,因为有可能会去掉首部的前导零。#include <cstdio>#include <cmath>#include <iostream>#include <string>using namespace std;bool isprime(int n){ if...原创 2019-12-02 20:17:01 · 100 阅读 · 0 评论 -
1112 Stucked Keyboard (20 分)
版本1先把没坏的键标记。如果是标记坏掉的键可能出现前面的字符满足坏键,后面的字符不满足坏键的性质。#include <iostream>#include <cstdio>#include <vector>#include <cmath>#include <cstring>#include <set>#inclu...原创 2019-12-02 18:05:00 · 147 阅读 · 0 评论 -
1094 The Largest Generation (25 分)
方法1根据六度空间这道题改变而成,具体请参照六度空间题解注意:当n为1时需要特殊处理,后面的方法2和方法3不需要。#include<cstdio>#include<queue>#include<cstring>#include<vector>using namespace std;const int maxn = 105;int ...原创 2019-02-12 17:55:35 · 188 阅读 · 0 评论 -
1005 Spell It Right (20 分)
这道题是考查字符串的操作,需要注意的是PTA系统只能在c编译环境下使用gets接收一行字符串,在C++使用gets会出错。本题既可以用纯C做,也可以结合map来写,总体来说还是比较简单的。#include<cstdio>#include<cstdlib> //有数字转字符串的函数,可以直接调用#include<iostream>#include<...原创 2019-02-12 18:27:53 · 446 阅读 · 0 评论 -
1006 Sign In and Sign Out (25 分)
简单的排序#include<cstdio>#include<algorithm>#include<cstring>const int maxn=1e5+5;using namespace std;struct node{ char name[20]; int inh,inm,ins; int outh,outm,outs;}Node[maxn...原创 2019-02-12 20:32:05 · 248 阅读 · 0 评论 -
1007 Maximum Subsequence Sum (25 分)
动态规划简单题注意:要求输出的内容是:最大和,开始元素,结束元素(不是开始下标和结束下标)只要理解了动态规划如何求得最大和的过程和就和理解如何记录开始元素。另外,最大值不要先入为主的设置为0,否则有个测试点会通不过。#include<cstdio>#include<cstring>#include<algorithm>using namespac...原创 2019-02-12 21:17:35 · 149 阅读 · 0 评论 -
1065 A+B and C (64bit) (20 分)
两个正数之和为负数 则正溢出两个负数之和为正数 则负溢出正负溢出都可以包含零,因为在补码中,零有两种形式0000和1000都表示零。但是在long long中,如果给的边界是[-263,263−12^{63},2^{63}-1263,263−1],零一般放在负溢出中。A,B最大取263−12^{63}-1263−1 ,故A+B最大为264−22^{64}-2264−2,最小为2632^{6...原创 2019-02-13 13:04:28 · 143 阅读 · 0 评论 -
1011 World Cup Betting (20 分)
水题#include<cstdio>int main(){ char mp[4]={'W','T','L'}; int x,y,z; double num,Max=-1.0,sum=1; for(int i=0;i<3;i++){ scanf("%lf",&num); if(num > Max){ x=i; Max = num; ...原创 2019-02-13 14:51:59 · 194 阅读 · 1 评论 -
1027 Colors in Mars (20 分)
大神版本#include<cstdio>char radix[15]={'0','1','2','3','4','5','6','7','8','9','A','B','C'};int main(){ int r,g,b; scanf("%d%d%d",&r,&g,&b); printf("#"); printf("%c%c",radix[r/...原创 2019-02-13 16:37:26 · 126 阅读 · 0 评论 -
1036 Boys vs Girls (25 分)
这种排序查找的题太多了对于我现阶段来说并没有特别大的提升,但是为了提交AC时爽一下,我还是再刷了一遍。#include<cstdio>#include<string>#include<iostream>using namespace std;int main(){ int n; cin>>n; string namef,idf,na...原创 2019-02-13 16:58:58 · 142 阅读 · 0 评论 -
1019 General Palindromic Number (20 分)
思路:先把十进制转换为r进制,转换的过程中,从逆向求该进制的十进制数,如果逆向结果与原数结果一致,则说明这个数字对称。#include<cstdio>int main(){ int num,r; scanf("%d%d",&num,&r); int arr[22]; int k=0,tmp=num,sum=0; do{ arr[k]=num%r; ...原创 2019-02-15 09:42:13 · 291 阅读 · 0 评论 -
1029 Median (25 分)
真是是一道很搞人的题1.数据能从1开始的,好确定中间位置2.第一个数组离线,第二个数组在线处理#include<cstdio>const int maxn = 2e5+10;const int INF = 0x7fffffff;int a[maxn];int main(){ int n,m,num; scanf("%d",&n); for(int i=1;...原创 2019-02-15 15:48:02 · 170 阅读 · 0 评论 -
1016 Phone Bills (25 分)
我之所以直接把代码贴上来,而没有太多解释,不是为了解析这道题目,而是为了方便我以后自己查看。这道题花了两个小时都没做出来,最后看了答案才知道,可以用map与向量的映射,这是第一次用,所以学到了。其次是不知道怎么算时间的差值和根据每个阶段的费用求结果。方法有2:1.直接求起始日期时间与终止日期的差值2.求当前日期与每月1号的相对差值,然后两个日期的相对差值相减就是绝对差值while(sta...原创 2019-02-16 11:32:09 · 354 阅读 · 0 评论 -
1041 Be Unique (20 分)
简单题可以用散列,也可以用map#include<cstdio>#include<map>using namespace std;const int maxn=1e4+5;int arr[maxn];int main(){ int n; map<int,int> mp; scanf("%d",&n); for(int i=0;i&l...原创 2019-02-16 13:06:24 · 139 阅读 · 0 评论 -
1042 Shuffling Machine (20 分)
调换顺序,注意手动演示一下过程。关键步骤:arr[sh[i]] = oldArr[i]为了避免对arr的覆盖,所以需要另定一个数组,用来保存arr的数据#include<cstdio>#include<vector>#include<cstring>#include<string>#include<iostream>us...原创 2019-02-16 19:47:12 · 175 阅读 · 0 评论 -
1035 Password (20 分)
今天做题十分不在状态,这道题本来相当简单,但是我TM又看错题了。我在字符判断的时候,把l看成了一,导致我以为是标准库用错了,又换了纯C的写一遍,结果发现还是有问题,最后看了别人的代码才发现,原来是题目没看清,心不在焉,效率减半。#include<iostream>#include<vector>#include<string>using namespa...原创 2019-02-16 20:36:16 · 203 阅读 · 0 评论 -
1031 Hello World for U (20 分)
建议用string来处理这里的最大化就理解为均分#include<string>#include<iostream>using namespace std;int main(){ string str; cin>>str; int n1,n2; int N = str.size(); n1=(N+2)/3; n2 = N + 2 - n1*...原创 2019-02-24 13:33:43 · 164 阅读 · 0 评论 -
1120 Friend Numbers (20 分)
过于简单,建议用set#include<iostream>#include<cstdio>#include<set>using namespace std;int main(){ int n,num; set<int> st; st.clear(); scanf("%d",&n); for(int i=0;i<n;i...原创 2019-02-24 13:48:16 · 131 阅读 · 0 评论 -
1055 The World's Richest (25 分)
需要剪枝,不然会超时。即最多输出m个人之后,就不需要再继续查询了。#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;const int maxn = 1e5+5;struct node{ char na...原创 2019-02-24 15:23:51 · 127 阅读 · 0 评论 -
1075 PAT Judge (25 分)
教训:初始化已知的内容1.通常来说是数组2.其次给出总数量的序号这道题是真的有问题,最开始我把标记设错了,后来改正确一直在最后一个测试点卡着。我考虑到了另一种情况,但是本题似乎没有涉及:即第一次提交通过编译并有得分,但是第二次出现了编译错误的记录,这个时候是不能覆盖原得分的,但是后来认真一想,这种情况确实可能存在,即第一次只得了部分分,后来换种写法导致了编译错误。另一个让我奇怪的地方...原创 2019-02-24 19:50:39 · 223 阅读 · 0 评论 -
1092 To Buy or Not to Buy (20 分)
这道题是散列的题,可以用hash数组解决,但是学过标准库之后就变懒了,懒得把字符转换为下标,还要判断是数字还是大小写字母,所以索性就用map直接映射了。然后本题还用到了C++11标准中的基于范围的遍历,特别好用。#include<cstdio>#include<iostream>#include<string>#include<map>us...原创 2019-02-25 11:46:36 · 292 阅读 · 0 评论 -
1058 A+B in Hogwarts (20 分)
这道题可以说是相当简单了,我还是有个测试点没过,后来想了一下才弄懂。最开始的时候,我把abc,xyz都设定为整形,然后后面有计算的部分,而计算中没有自动转换为长整形的暗示,所以导致在计算sum的时候溢出了,最后结果当然也是错误的。所以以后得到一个教训,凡是需要用到长整型的题目,全部改为用long long#include<cstdio>#include<cstring&g...原创 2019-02-25 12:16:06 · 363 阅读 · 0 评论 -
1043 Is It a Binary Search Tree (25 分)
很棒的题,把BST和二叉树遍历都考查到了。主要知识点有一下几个方面:1.向量可以直接通过等号判断是否相同。2.树的插入需要用引用,特别是插入结点时,需要先申请空间。root = new node3.最开始的根结点可以不申请空间,而只创建出一个空指针。注意,一定要是空指针。node* root = NULL4.所谓镜像BST就是交换了左右子树,如果理解了遍历的含义,就能灵活的转变...原创 2019-02-25 21:22:15 · 144 阅读 · 0 评论 -
1122 Hamiltonian Cycle (25 分)
题目叫做哈密尔顿环其实判断起来特别容易,首先判断是否所有的顶点都出现了一次,然后判断是否起点和终点都相同,再看每条边是否都在原来的图中存在,有个细节的地方说,这是一个简单的回路,所以不能有两个环或以上的环,因此每个顶点的出现次数最多不超过2,超过2的当然也只有起点和终点这个点,因为测试数据可能比较简单,所以暂且这样考虑就可以通过。#include<cstdio>#include&...原创 2019-02-26 10:59:14 · 205 阅读 · 0 评论 -
1115 Counting Nodes in a BST (30 分)
这道题我最开始题目理解错了,最开始我理解成了统计叶子节点和叶子节点的上一层的结点数量。一提交得了2分,这时我知道我题目肯定读错了。后来又做了一次,然后提交得了8分,我实在想不出有什么地方没写对,但是就是通不过。后来认真读了一遍题目,才发现这个二叉搜索树种有重复数值的结点,而且要按照题目,把小于等于根结点的数据放在左子树,我想当然的放在了右子树,所以导致了错误,后来把这个错误改正过来了,一提交,...原创 2019-02-26 13:44:42 · 155 阅读 · 0 评论 -
1102 Invert a Binary Tree (25 分)
这道题感觉挺有意思的,考查了二叉树的层序遍历和中序遍历。需要注意的地方:1.标记空结点2.交换左右子树后层序遍历和中序遍历3.找树根#include<cstdio>#include<vector>#include<iostream>#include<cstring>#include<queue>using namesp...原创 2019-02-26 15:22:51 · 163 阅读 · 0 评论