自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 资源 (1)
  • 收藏
  • 关注

原创 分门别类刷PAT甲级

\quad博主正在准备PAT考试中,已经刷完一次甲级题,现将PAT155道甲级考试题分门别类罗列出来,再刷一次,这样刷能让自己对每种类型的题有一个综合的认识,进一步提升。欢迎大家加我QQ:1613511883一起探讨一、模拟题1、字符串处理2、模拟3、进制转换4、图形输出5、查找元素...

2019-08-19 17:25:05 2443

原创 PAT甲级1013 Battle Over Cities (25 分)题解

\quad这个题意思是求图中去除一个点后连通分量是多少。我们暴力遍历,对于每一次失去的点q,在dfs遍历过程中遇到这个点就返回,统计图的连通分量个数。设断开一个点后图连通分量个数为n(包含断开的那个点单独算作一个连通分量),那么只需要修n-2条路即可。#include <iostream>#include <vector>#include <cstring&gt...

2019-08-31 22:29:38 1077

原创 PAT甲级1115 Counting Nodes in a BST (30 分)题解

\quad这个题目的是考察我们如何建立一棵二叉搜索树,并统计每一层节点数目。我们在建树的过程中便可以

2019-08-31 09:47:34 1198

原创 PAT甲级1110 Complete Binary Tree (25 分)题解

\quad这个题考察的是完全二叉树的问题。首先,我们需要明白完全二叉树的一个性质:N个节点的完全二叉树可以用大小为N的数组存储,假设数组索引为1的存放根节点,那么其左右孩子节点索引为2和3。即假设一个父亲节点索引为n,那么其左孩子索引为2n,右孩子为2n+1。这样我们就可以遍历这棵树,先遍历根,给它赋值为index,再遍历左右孩子,赋值为2∗index2*index2∗index和2∗inde...

2019-08-29 21:15:32 1439 2

原创 PAT甲级1102 Invert a Binary Tree (25 分)题解

\quad这个题分三步走,第一步建树,第二步将这棵树翻转,第三步是输出翻转后的树的层次遍历和中序遍历。其实在建树的时候可以把一个节点左孩子的值赋给右孩子,右孩子的赋值给左孩子,这样就一下完成了前两步。与大部分解法不同,我用E[10][2]来存放某个节点的左右孩子,比如节点i的左孩子值为2,没有右孩子,那么E[i][0]=2; E[i][1]=-1,这样写起来更简洁。\quad题目还需要自己找出...

2019-08-29 20:47:17 1205

原创 PAT甲级 1094 The Largest Generation (25 分) 题解

\quad记录树的每一层节点个数,输出节点数目最大的一层的信息。DFS和BFS都可以,因为数据量很小,我们直接用DFS,主要是写起来简洁 (懒)#include <iostream>#include <vector>using namespace std;const int maxn = 101;vector<int> E[maxn];int v...

2019-08-29 17:36:51 1191

原创 PAT甲级1079 Total Sales of Supply Chain (25 分)题解

\quad树的遍历,需要记录每一个顶点是哪一层,当遍历到叶子节点时进行计算。可以用bfs或者dfs,如果数据量很大的情况下建议用bfs,不然可能爆栈。不过这个题数据量不大,给出bfs和dfs两个版本的程序。BFS版本#include <iostream>#include <vector>#include <queue>#include <cma...

2019-08-29 17:22:44 1314

原创 PAT甲级1053 Path of Equal Weight (30 分)题解

\quad这是一个树的dfs问题。为了结果满足题目要求的按照点权重降序排列,我们在读入每一个非叶子节点的时候都要将其孩子节点按照点权大小从大到小排序。在dfs的过程中,从顶点0开始开始,依次递归遍历,并记录顶点到每一个节点的距离值和路径,当发现距离等于我们给定的值时输出路径即可。这里可以进行剪枝,当距离大于给定值时直接return,不过数据量小剪不剪都无所谓。我用vector res存储路径,当...

2019-08-29 16:35:44 1300

原创 PAT甲级 1004 Counting Leaves (30 分) 题解

\quad树的层次遍历,并记录每一层叶子节点个数。叶子节点即为无孩子的节点,若用vector存储每个节点的孩子节点,那叶子节点对应的vector大小为0。树的层次遍历时记得用标示符记录每一层结束位置,我用的是-1,跟在每一层最后一个节点后面。#include <iostream>#include <vector>#include <queue>usin...

2019-08-29 15:18:55 1247

原创 PAT甲级1145 Hashing - Average Search Time (25 分)题解

$\quad平方探测法请移步博客。这里说一下查询操作,查询当前数在哈希表中所在位置或者是计算查询次数需要再次模拟插入过程,当找到这个数或者发现这个位置上没有数时表示已经找到这个数或者无此数,无需再查询。程序如下:#include <iostream>#include <cstring>using namespace std;const int maxn = 1e...

2019-08-28 12:04:45 1263

原创 PAT甲级1078 Hashing (25 分)题解

\quad这道题主要考察平方探测法来解决冲突。下面来讲解一下平方探测法的使用:在平方探查法中,为了尽可能避免扎堆现象,当表中下标为H(key)的位置被占时,将按下面 的顺序检查表中的位置:H(key)+12H(key)+1^2H(key)+12、H(key)+22H(key)+2^2H(key)+22、H(key)+32H(key)+3^2H(key)+32…如果检查过程中H(key)+k2...

2019-08-28 11:20:24 1398

原创 PAT甲级 1112 Stucked Keyboard (20 分) 题解

\quad字符串结合map处理即可。三步走:1、对于输入字符串s,找出所有连续出现次数达到k次的字符,比如k=3,s=3caseee1__thiiis_iiisss_a_teeeeeest时得到temp=eiisee2、对于temp中每个字符判断是否重复和是否合法,判断是否重复用map记录字符是否出现过即可。判断字符是否合法即为判断当前字符的每次出现是否都是k次,比如temp中字符s就不...

2019-08-28 10:40:08 1289

原创 PAT甲级1101 Quick Sort (25 分)题解

\quad这是一道逻辑题,给了快排的背景。题目大意是给你一个数字序列,找出这个序列里面有多少个数满足两个条件:它左边的数都小于它它右边的数都大于它\quad我们可以暴力求解,时间复杂度为O(n2)O(n^2)O(n2),肯定会超时。正解是将序列存入两个数组a和b,对a排序,比如a={1,2,3,4,5},b={1,3,2,4,5},那么遍历b,若满足下列三个条件则该元素为正确解答的一部...

2019-08-28 09:32:39 1257

原创 PAT甲级1098 Insertion or Heap Sort (25 分)题解

\quad插入排序和堆排序,排序算法的详解请移步博客#include <iostream>#include <vector>#include <algorithm>using namespace std;void output(vector<int> &a){ for (int i = 1; i < a.size();...

2019-08-27 17:34:36 1276

原创 PAT甲级1089 Insert or Merge (25 分)题解

\quad这个题主要考察插入排序和归并排序的实现。每一步插入排序或归并排序后都看看是否与题目给定的目标序列一致u,若一致则打印当前排序类型和下一次排序结果。关于插入排序和归并排序请移步至博客,里面包含了这两种排序的代码和解释。#include <iostream>#include <vector>#include <algorithm>using na...

2019-08-27 16:47:56 1314

原创 排序算法详解——选择、插入、归并和快排

一、选择排序特点:每次从待排序序列中选取最小值最为当前元素值流程:已排好序的数组为A[0,i-1],将未排序序列A[i,n)中最小值赋给A[i]。const int maxn = 10000;int A[maxn];void selectSort(int A[], int n){ for (int i = 0; i < n; ++i) { for (int j = i; ...

2019-08-27 16:02:20 1353

原创 PAT甲级1029 Median (25 分)题解 优先队列解决爆内存

\quad这个题目的是找出两个序列的中位数,给的内存为1.5M,单个序列大小为2∗1052*10^52∗105,int型。若将两个序列存储起来,则需要存储空间大小为4∗105∗4Bytes=1.6M4*10^5*4Bytes=1.6M4∗105∗4Bytes=1.6M,会爆内存。设两个序列长度为num1,num2,那么排好序后中位数索引为mid=(num1+num2)/2mid=(num_1+n...

2019-08-27 11:45:38 1297 1

原创 PAT甲级1025 PAT Ranking (25 分)题解

\quad这是一个排序题,分别以每个考场排序计算排名,再总的排序计算排名即可。需注意输出id时一定要是13位,如果用long long存储的话需指定输出为%013lld。#include <iostream>#include <algorithm>using namespace std;struct Stu{ long long id, score, loca...

2019-08-27 09:32:26 1265

原创 PAT甲级 1022 Digital Library (30 分) 题解

\quad建立5个map,用于书名,作者,关键词,出版社,出版日期与书编号之间的映射,然后输出即可。Tips:获得一句字符串后,比如“test code debug sort keywords”,如何将其按空格分成若干个单词,借用sstream头文件里面的istringstream可以很方便的完成。#include <sstream>string s, temp;vector...

2019-08-26 21:34:57 1332

原创 PAT甲级 1012 The Best Rank (25 分) 题解

\quad这个题较为繁杂,需要将每个同学成绩分为四种情况分别排序,得到排名,取排名最低的一科作为结果输出,需要注意对用同一个同学而言,最高排名不止一科时按照学科优先级输出优先级最高的那一科。注释都在代码里面。#include <iostream>#include <vector>#include <map>#include <algorithm&...

2019-08-26 20:18:11 1376

原创 PAT甲级 1036 Boys vs Girls (25 分) 题解

\quad找出成绩最好的女生和成绩最差的男生,分性别比较并存储相应信息即可。#include <iostream>using namespace std;int main(int argc, char const *argv[]){ int N; cin >> N; pair<string, string> F, M; // 记录成绩最好的fe...

2019-08-26 18:51:50 1175

原创 PAT甲级 1011 World Cup Betting (20 分) 题解

\quad这个题难在题意理解上面,说白了就是给你九个数,三个一组,找出一组中最大的数字并记录下这个数所属类别(W,T,L)。一行是一组。最后把每个组最大的数乘起来,乘0.65,再减去1,最后将所得结果乘2输出。即(max1∗max2∗max3∗0.65−1)∗2(max_1*max_2*max_3*0.65-1)*2(max1​∗max2​∗max3​∗0.65−1)∗2。#include &...

2019-08-26 18:31:45 1382

原创 PAT甲级1006 Sign In and Sign Out (25 分)题解

\quad直接比较时间点大小即可,而时间点字符串很标准,长度都一致,直接用字符串大小比较即可完成。#include <iostream>using namespace std;int main(int argc, char const *argv[]){ int M; cin >> M; string id, in, out; string min = "...

2019-08-26 17:22:27 1244

原创 PAT甲级 1031 Hello World for U (20 分) 题解

\quad这是PAT甲级里面唯一一个打印图形的题,很简单,整个字符串分为三段n1,n2,n3,n1+n2+n3=字符串长度len+2,所以n1=n2=(len+2)/3, n3=len+2-2*n1。打印的时候逐行打印,除去最后一行,每行先打印n1的字符,再打印n2-2个空格,再打印n3的字符。最后一行打印n2即可。#include<iostream>using namespac...

2019-08-26 17:08:02 1254

原创 PAT甲级1100 Mars Numbers (20 分)题解

\quad这个题稍微有点麻烦,需要分别处理数字转火星文和火星文转数字两种情况。不过数字最高两位,处理起来分别讨论即可。程序如下:#include <iostream>using namespace std;string one[13] = {"tret", "jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep"...

2019-08-26 16:52:45 1222

原创 PAT甲级 1058 A+B in Hogwarts (20 分) 题解

\quad英文比较难懂,不过只需要知道29个Knuts等于1个Sickle,17个Sickle等于1个Galleon即可。我把两个数都转化为多少个Knuts,加起来再转化回去这种思路做。不过需要注意Galleon数据能达到10710^7107,如果转化为Knuts将达到107∗17∗2910^7*17*29107∗17∗29,这超过了int的范围,需要用long long。#include &...

2019-08-26 15:53:31 1181

原创 PAT甲级 1027 Colors in Mars (20 分) 题解

\quad这是十进制转13进制的题,注意十进制数10,11,12用字母A,B,C表示。每个数两位,不足需要添0。#include <iostream>#include <vector>using namespace std;char c[13] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', '...

2019-08-26 15:35:00 1182

原创 PAT甲级1019 General Palindromic Number (20 分)题解

\quad这是一个进制转换的题,将十进制数N转化为b进制数。我们用模除的方法可以将数N拆开,将这些数压入vector中,最后翻转一下就是答案。此外还需要判断一下vector中数是否是回文。#include <iostream>#include <vector>#include <algorithm>using namespace std;int m...

2019-08-26 15:22:38 1207 1

原创 最短路模板

spfa#include <stdio.h>#include <vector>#include <queue>#include <cstring>using namespace std;const int maxn = 1e5+10;vector<pair<int, int> > E[maxn];int di...

2019-08-25 11:30:34 1174

原创 PAT甲级1042 Shuffling Machine (20 分)题解

\quad简单模拟,按照要求交换顺序。建立一个字符数组用于输出前面的字母。#include <iostream>using namespace std;int main(int argc, char const *argv[]){ char mp[5] = {'S', 'H', 'C', 'D', 'J'}; int k; cin >> k; int st...

2019-08-24 20:57:32 1225

原创 PAT甲级 1017 Queueing at Bank (25 分) 题解

\quad初始化每个窗口开始处理的时间,将用户按照到达时间的先后顺序排好序,记得去除那些在5点以后到达的客户,服务时间超过60分钟的需要截断。接下来就是模拟人员到窗口的流动过程,当一个人到达窗口时,先选择一个最先结束的窗口去那排队,有两种情况,一种是该窗口目前无人,直接去无需等待,一种是需要等待,把等待时间加上去即可。#include<iostream>#include<a...

2019-08-24 20:22:02 1519

原创 PAT甲级 1016 Phone Bills (25 分) 题解

\quad这个题难点有两个,第一个是计算两个时间段之间花费多少,比如1号12h32分钟到2号02小时01分钟打电话的花费,如果直接求解会很繁杂。我们可以分别求解从0号0h0分到1号12h32分钟的花费amount1和到2号02小时01分钟的花费amount2,减去即可。方法如下:int a[24], N; // a[24]为每个小时段内每分钟花费float amount(int day, ...

2019-08-24 19:40:02 1598 1

原创 PAT甲级 1014 Waiting in Line (30 分) 题解 全网最简单逻辑和写法

\quad这个模拟题需要用到队列,即开始的时候创建N个队列,给定时间无限长,我设定的10000分钟,保证每个人都能办理完。按照要求将人员一一入队,每过一分钟,将队首元素的time,即办理业务所需时间减1,如果time值变为0,说明业务已经办理完成,记录该人员结束的时间leaveTime。再下一分钟时检验还有哪些队列大小小于M,小于的队列在人员还有剩余的情况下入队,如此循环即可。因为设定的时间足够...

2019-08-24 09:48:44 1632 4

原创 PAT甲级 1009 Product of Polynomials (25 分) 题解

\quad模拟多项式乘法,很简单,程序如下:#include <iostream>using namespace std;int main(){ float coef[2001]={0}, a[1001]={0}, b[1001]={0}; int num1, num2; int exp; float temp; scanf("%d", &num1); ...

2019-08-21 20:25:39 1306

原创 PAT甲级 1008 Elevator (20 分) 题解

\quad模拟电梯运行状态即可,程序如下:#include <iostream>#include <vector>using namespace std;int main(int argc, char const *argv[]){ vector<int> a; int temp; cin >> temp; while(cin &...

2019-08-21 16:52:36 1260

原创 PAT甲级 1002 A+B for Polynomials (25 分) 题解

\quad模拟多项式加法,把幂次相同的系数加起来,最后将那些系数不为0的系数及幂次输出即可。程序如下:#include <iostream>#include <stdio.h>#include <set>using namespace std;int main(int argc, char const *argv[]){ float coef[...

2019-08-21 16:37:18 1699

原创 PAT甲级 1108 Finding Average (20 分) 题解

\quad这个题目主要分为两步,第一步是判断一个字符串是否为题目规定的合法数字,很简单,若字符串中有除数字和小数点以外的其他字符或小数点数量超过1个或小数位数超过两位则均不合法。注意若字符串最开始有’-'号则先去除。\quad第二步则为将合法的字符串转化为浮点数,这里可以自己写一个这样的函数,不过c++提供了sscanf来帮助我们把字符串转化为浮点数,整数等我们需要的数据类型。我在博客中用几行...

2019-08-21 15:55:34 1268

原创 PAT甲级 1082 Read Number in Chinese (25 分) 题解

\quad这个题很难考虑周全,博主最后一个测试用例过不了。我的想法是四个四个数处理,再加上单位组合在一起,但其中有些情况没考虑到,后期会更新。程序如下:#include <iostream>using namespace std;string m[10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", ...

2019-08-21 15:18:39 1271

原创 PAT甲级 1071 Speech Patterns (25 分) 题解

\quad这个题直接用map进行词频统计,然后输出出现频率最高的单词即可,map保证了字典序。需在预处理时去掉特殊字符并分开各个单词,程序如下:#include <iostream>#include <map>using namespace std;int main(){ string s; map<string, int> mp...

2019-08-20 23:33:41 1224

原创 PAT甲级 1140 Look-and-say Sequence (20 分) 题解

\quad这个题需要读懂题意,即每一次操作为统计字符串中字符连续出现的次数,并将出现次数转化为字符串加在该字符后面,形成新的字符串。举个例子,D112111,D出现1次,接下来1连续出现2次,再接下来2出现1次,最后1连续出现3次,则结果为D1 12 21 13(为方便观看我将每个部分用空格隔开,实际字符串中无空格,即D1122113)。理解题意后解答就很容易,程序如下:#include &...

2019-08-20 22:55:45 1183

推特事件检测

事件检测的大牛文章,IEEE影响因子10分以上,可供下载。

2018-10-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除