PAT\蓝桥杯刷题
PAT,蓝桥杯
EP Fitwin
我必须承认 生命中大部分时光是属于孤独的, 努力成长 是在孤独里可以进行的最好的游戏。
展开
-
蓝桥杯日期类题目一网打尽(日期计算/回文日期/...)
我们都知道,蓝桥的填空题和编程题的前几个不但水,还很麻烦。如果比赛的时候处理不好的话,虽然能做对,但是会比较浪费时间。我这里整理一下蓝桥可能遇到的日期类问题,将日期类问题一网打尽个人感觉。能让我们在比赛中更节省时间,AC更多的题目。预置// 先将每个月的天数放进去int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};检查日期是否合法:bool check(int num) { int year = num /原创 2021-04-17 15:52:54 · 526 阅读 · 0 评论 -
【算法】搜索专题狂练,内附题单
蓝桥杯、PAT 搜索类题目专练,内附题单原创 2021-04-07 20:23:31 · 271 阅读 · 0 评论 -
PAT 甲级 1115 Counting Nodes in a BST (30 分) BST DFS
原题链接:1110 Complete Binary Tree (25 分)题目大意:这个题中的BST和之前的BST的定义有点不一样,所以要看清楚题目的条件。本题将一系列数字按顺序插入到一个空的二叉搜索树中,然后,请你计算结果树的最低两层的结点个数。分析:建树 -> DFS,在 DFS的过程中记录每一层的结点个数和最深的结点。满分代码:#include <iostream>#include <set>#include <map>#include原创 2021-02-08 11:01:24 · 120 阅读 · 1 评论 -
PAT 甲级 1110 Complete Binary Tree (25 分) 完全二叉树 DFS
原题链接:1110 Complete Binary Tree (25 分)题目大意:给你一颗树,你来判断一下它是否是一颗完全二叉树。输入:N个点接下来N行代表每个点的左右子结点的信息,并给出该结点的左右子结点的编号,如果某个子结点不存在,则用 - 代替。题目分析: 我们可以假设这就是一个完全二叉树,建树。将空的地方留下,其他地方慢慢填满。填完之后对这颗树进行DFS,每个点除了结点值,我们还要为其分配一个从1开始的下标值,因为在完全二叉树中,结点的左原创 2021-02-08 09:58:09 · 107 阅读 · 0 评论 -
PAT 甲级 1102 Invert a Binary Tree (25 分) BFS DFS
原题链接:1102 Invert a Binary Tree (25 分)题目大意:题目给定你一颗镜像翻转的二叉树(即左右子树翻转),让你进行层次遍历和中序遍历。分析:注意点:题目没有告诉你哪个是根结点,所以在读入的时候进行标记,对每行输入的点标记它们已有父结点,然后遍历一下就知道哪个点没有父结点了,没有父结点的就是根节点。BFS和DFS细心就可以了!满分代码:#include <iostream>#include <set>#include <map&原创 2021-02-06 10:38:41 · 130 阅读 · 3 评论 -
PAT 甲级 1099 Build A Binary Search Tree (30 分) DFS BFS
原题链接: 1099 Build A Binary Search Tree (30 分)题目描述:题目输入包括结点个数(0是根节点),给了每个结点的左右子树的编号,-1 代表左/右子树不存在。最后一行给了一堆权值,让我们生成一颗 BST(二叉搜索树)。分析:根据题目除最后一行的信息,我们可以构建一颗树,根据权值我们便可生成一颗 BST。如何生成 BST 呢,我们知道 BST 有严格的特征:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值若它的右子树不空,则右子树上所有结点的值均大于原创 2021-02-05 16:26:26 · 106 阅读 · 0 评论 -
PAT 甲级 1086 Tree Traversals Again (25 分) 栈 DFS
原题链接:1086 Tree Traversals Again (25 分)题目大意:通过使用栈可以以非递归方式实现二叉树的中序遍历。分析:第一个是根节点push 上一个是push 左儿子上一个是pop 右儿子满分代码:#include <iostream>#include <set>#include <map>#include <stack>#include <vector>#include <cmath&原创 2021-02-03 20:30:39 · 86 阅读 · 0 评论 -
PAT 甲级 1043 Is It a Binary Search Tree (25 分) 递归建树
原题链接: 1043 Is It a Binary Search Tree (25 分)题目大意:BST:二叉搜索树。若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值若它的右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值它的左、右子树也分别为二叉搜索树现在,给定一个整数序列,请你判断它是否可能是某个二叉搜索树或其镜像进行前序遍历的结果。分析:首先,我们要知道一个BST的中序遍历一定是非递减的。因为是否镜像只是会让它的前序遍历正反翻转,所以我们先读入它的前序遍历并且原创 2021-02-03 18:53:58 · 91 阅读 · 0 评论 -
PAT 甲级 1021 Deepest Root (25分) 并查集 DFS
原题链接:1021 Deepest Root (25分)题目大意: 输入N,给 N-1组点与点连通的数据,让我们判断这是否是一颗树。 如果是的话进行 DFS,求出这棵树的深度。 如果不是的话,输出连通块的数量。分析:题目要求时间是0.2s,那么2e8的复杂度我们可以勉强通过。这个题的思路:首先我们要建树,那就用到了邻接表建树、初始化并查集。然后读入n-1个原创 2021-02-02 11:46:28 · 130 阅读 · 0 评论 -
PAT 甲级 1020 Tree Traversals (25分) 建树 哈希map BFS
原题链接:1020 Tree Traversals (25分)题目大意: 曾经,在数据结构课上做过类似的题目。给定你中序遍历 + 后序遍历,或者中序遍历 + 前序遍历,让你来求另一种方式遍历的结果。 不过是求哪个,其实都是让你来还原一颗二叉树,只要还原了,它的遍历方式都好说了。题目就是先输入了结点数,然后给你后序遍历和中序遍历的顺序,让你还原层次遍历。分析:原创 2021-02-01 22:03:29 · 112 阅读 · 0 评论 -
PAT 甲级 1004 Counting Leaves (30分)
原题链接:1004 Counting Leaves (30分)题目大意:数一下这个树有几个结点是非叶子结点(有儿子)。输出的时候在一行中,输出每一层的叶子结点数目。分析:邻接表:我们使用邻接表对树进行存储。h 数组代表每一条链子的头,h 数组长度为 n,代表这棵树共有 n 个结点,初始时它们为 -1,代表没有子结点。然后每次增加一个儿子,它就指向它的儿子(注意:除了根节点之外,每一个结点都有一个唯一索引)。存树:刚开始,初始化 h 数组。每次存一个父子信息的时候,先给这个结点的值放入 e 中(原创 2021-01-27 16:50:38 · 245 阅读 · 0 评论 -
PAT 甲级 1075 PAT Judge (25分) 哈希map 排序
原题链接:1075 PAT Judge (25分)题目大意:PAT1075:PAT评测 模拟+小排序第一行给定N K M 分别表示用户数量(5位的字符串)、题目数量(1~5个不等)、总提交次数(小于1e5)第二行代表K个题目的满分(就和我们平常写PAT的题一样 最高得分就是满分30)接下来M行代表每个用户的交题数据 分别是 u_id:用户id p_id:题目id grade:得分 要求你将所有数据读入后,按照每个人的总分进行排名输出如果总分相同那么排名也相同,就按照解题数量升序排列,如果仍原创 2021-01-25 18:02:00 · 96 阅读 · 0 评论 -
PAT 甲级 1052 Linked List Sorting (25分) 哈希表 排序
原题链接:1052 Linked List Sorting (25分)分析:使用哈希map对数据进行读入,将在这条链表上的放到vector中。注意for循环在链表中的应用。满分代码:#include <iostream>#include <vector>#include <set>#include <map>#include <cmath>#include <cstring>#include <algorit原创 2021-01-24 20:54:06 · 106 阅读 · 0 评论 -
PAT 甲级 1039 Course List for Student (25分) 哈希map 排序
原题链接:1039 Course List for Student (25分)题目大意:这是一个学生的选课信息。我们需要对学生的选课进行整理。然后对每一个询问,输出该学生选课的数目,按升序输出课程代号。分析:哈希 map 的一个简单应用。key存放学生的姓名,value是一个 vector,用来存放这个学生上过的课程代码。后来我想到value可以使用set类型的,因为set会自动对int类型的值进行升序排列,输出的时候都不需要sort了。满分代码(value使用vector):#include原创 2021-01-24 20:50:45 · 89 阅读 · 0 评论 -
PAT 甲级 1028 List Sorting (25分)
原题链接:1028 List Sorting (25分)题目大意:我们知道,Excel 可以选定某一列关键字进行排序。现在要我们也实现这一功能。输入n和k,给定你三列数据,分别是唯一的 id(6位字符), name(不超过8位的字符), grade(0~100的证书)。n 代表有 n 行,k 代表对第 k 列排序。k == 1:对 id 升序;k == 2:对 name 升序排列,如果出现同名,根据 id 升序;k == 3:对 grade 升序排列,如果成绩相同,参考 id 升序。分析:原创 2021-01-24 11:05:11 · 191 阅读 · 0 评论 -
PAT 甲级 1025 PAT Ranking (25分)
原题链接:1025 PAT Ranking (25分)题目大意:需要计算考生在地区中的排名,在所有考生中的排名。每读入一个地区的考生的信息,就进行排名,每一个考场内的排名计算完毕后再计算总排名。分析:1.重载cmp写法:函数名中写小于号2.push_back的时候注意数据类型一致3.做排名类题目时,用这个方法 rank = i + 1满分代码:#include <iostream>#include <cstring>#include <vector>原创 2021-01-23 12:20:21 · 126 阅读 · 0 评论 -
PAT 甲级 1022 Digital Library (30分)
原题链接:1022 Digital Library (30分)题目大意:一本书,只有一位作者,包含的关键词不超过 5 个。总共不超过 1000 个不同的关键词,不超过 1000 个不同的出版商。图书信息介绍完毕后,有一行包含一个整数 M,表示查询次数。当读者查询某一关键信息时,你应该找到所有与查询相关的书籍,并将它们按 ID 的升序排序输出。分析:难点和重点在于:对字符串的读入和处理。有格式的字符串用 scanf() 比较好普通无空格字符串用cin包含空格的字符串用 getline(),原创 2021-01-23 11:18:00 · 178 阅读 · 0 评论 -
PAT 甲级 1012 The Best Rank (25分)
原题链接:1012 The Best Rank (25分)题目大意:对于CS专业的学生,我们要对他们进行一个评估,向学生展示他们最好的某一科和排名。 给n个学生的成绩和m次询问。学生成绩按照C/M/E的顺序给出来,除了这三个我们还要计算一下学生的平均成绩。每次询问输入学生id,你输出这个学生最好的一科,如果多科一样好,按照A/C/M/E的优先级分析:A > C > M > E思路:用哈希map存学生key为学生唯一id,value为vector存的四个成绩值:A C M E原创 2021-01-23 10:20:09 · 115 阅读 · 0 评论 -
PAT 甲级 1050 String Subtraction (20分) 哈希表
原题链接:1050 String Subtraction (20分)题目大意:给你一行串 A,一行串 B。如果 A 中存在 B 里有的单词,要将其删掉,不改变 A 其他的内容。分析:可以直接暴力:用 string 读入,然后遍历 A 的时候,在 B 中依次查找。或者,使用 C++ 11 中自带的哈希表。#include <unordered_set> unordered_set<char> hash将 B 中每个字符存入 hash 中,每次遍历 A 的时候,只需要在原创 2021-01-18 17:08:38 · 94 阅读 · 0 评论 -
PAT 甲级 1017 Queueing at Bank (25分)优先队列
原题链接:1017 Queueing at Bank (25分)题目大意:有n个客户,m个窗口。已知每个客户的到达时间和服务时长,如果有窗口空着,那么可以依次过去办理,没有窗口空着,人们就在黄线外等候(挂号且排队),按照顺序走向前办理业务。分析:用结构体存客户的到达时间,通过格式化读入,后续分析请看注释满分代码:#include <iostream>#include <cstring>#include <algorithm>#include <qu原创 2021-01-21 16:06:01 · 108 阅读 · 0 评论 -
PAT 甲级 题型分类及部分满分代码
字符串:1001 A+B Format (20分) 1005 Spell It Right (20分)1006 Sign In and Sign Out (25分)1035 Password (20分)1036 Boys vs Girls (25分)1050 String Subtraction (20分)1061 Dating (20分)1071 Speech Patterns (25分)原创 2021-01-19 22:32:53 · 325 阅读 · 2 评论 -
PAT 甲级 1061 Dating (20分)
原题链接:1061 Dating (20分)题目大意:给你一些奇怪的串,一共四个串我们称之为a, b, c, d。从四个串中进行对比,找到一个确切的时间点,从输出可以看出来是:星期几 时:分。a 和 b 中:第一个相同位次的相同字符代表星期几,第二个相同位数相同的字符代表时(hence the hours from 0 to 23 in a day are represented by the numbers from 0 to 9 and the capital letters from A t原创 2021-01-19 21:55:30 · 134 阅读 · 0 评论 -
PAT 甲级 1071 Speech Patterns (25分)
原题链接:1071 Speech Patterns (25分)题目大意:给定一行字符串,让你找到出现最多的某个单词(单词可以包含:大小写字母和数字,不包括空格或者其他字符)。输出该单词和出现的次数,注意:不区分字母的大小写。分析:因为要统计每个单词出现的次数,所以我们利用 map 这个数据结构。读入一行字符串,根据要求检测是否违规,然后检测其(这里要转换成小写,用到了tolower())出现的次数,存入 map 中。满分代码:#include <iostream>#includ原创 2021-01-18 17:27:15 · 175 阅读 · 0 评论 -
PAT 甲级 1036 Boys vs Girls (25分)
原题链接:1036 Boys vs Girls (25分)题目大意:输入 N 个人的成绩数据,每行包括:name,性别,id,grade。然后找到女生成绩的最高分和男生成绩的最低分,输出他们的差的绝对值。如果不存在满足条件的女生或男生,那一行输出Absent,最后一行输出NA。分析:简单暴力,太傻了,我用了结构体,其实可以开两对变量存的。stu0 代表女生最高,stu1代表男生最低,每次边读边处理数据。满分代码:#include <iostream>#include <s原创 2021-01-18 16:08:16 · 141 阅读 · 0 评论 -
PAT 甲级 1035 Password (20分)
原题链接:1035 Password (20分)题目大意:1 -> @0 -> %l -> LO -> o让我们对输入的单词中,存在这些字母进行替换,如上。有这种字母的单词,就代表不合格的单词。输出:如果更改了,就输出更改了的 username 和 password;如果没更改 就输出格式化的输出。分析:比较简单,直接模拟。重点是感受 string 在字符串处理中的灵活。这里用到了 string 的 assign函数name_out[j].assign(nam原创 2021-01-18 15:49:24 · 114 阅读 · 0 评论 -
PAT 甲级 1006 Sign In and Sign Out (25分)
原题链接:1006 Sign In and Sign Out (25分)题目大意:格式化输入学生的 id,签到时间,签退时间。让我们找到最早签到的学生 id 和最晚签到的学生 id。分析:简单题,就是遍历一下。因为他们的时间格式都是定长的,那么用 string 存起来,string 直接比较就是它们的字典序了。满分代码:#include <iostream>#include <string.h>#include <algorithm>#define in原创 2021-01-18 15:35:09 · 148 阅读 · 3 评论 -
PAT 甲级 1005 Spell It Right (20分)
原题链接:1005 Spell It Right (20分)题目大意:输入一个N,N的长度小于10^100。比如:N = 12345,现在要你对N的每位数相加,得到的和用英文输出每一位。如题得到15,则输出 one five。分析:因为 N 的个数很长,我们只能用 string 读入,然后遍历每一位并且相加得sum 并且转为 string。用 word 存一下英文数字,依次遍历就行。这里用到了 C++11的 auto 进行遍历。在 for 循环中,auto c :c 的数据类型,可以对 c 的原创 2021-01-17 22:09:30 · 95 阅读 · 0 评论 -
PAT 甲级 1001 A+B Format (20分)
原题链接:1001 A+B Format (20分)题目大意就是说,对A+B的值进行格式化输出。格式化要求:从低位到高位开始,隔三位一个逗号(方便读)例如:34,923-12,324-234,345分析:因为 a 和 b 都是 1e6 的长度,有正负之分,那我们用 int 读入就可以。读入之后 c 代表 a+b,将 c 转为 string 类型,方便后续处理。C++库函数:to_string(a)可以将数值(代表ing,longlong等很多数值类型)转为string。转为 strin原创 2021-01-17 21:55:32 · 174 阅读 · 0 评论 -
2020年天梯赛-模拟赛 L1-7 谷歌的招聘
题目描述:本题要求你编程解决一个更通用的问题:从任一给定的长度为 L 的数字中,找出最早出现的 K 位连续数字所组成的素数。输入格式:输入在第一行给出 2 个正整数,分别是 L(不超过 1000 的正整数,为数字长度)和 K(小于 10 的正整数)。接下来一行给出一个长度为 L 的正整数 N。输出格式:在一行中输出 N 中最早出现的 K 位连续数字所组成的素数。如果这样的素数不存在,则输出 404。注意,原始数字中的前导零也计算在位数之内。例如在 200236 中找 4 位素数,0023 算是解;原创 2020-11-22 12:01:09 · 485 阅读 · 1 评论 -
2020年天梯赛-模拟赛 L1-6 检查密码
题目描述:本题要求你帮助某网站的用户注册模块写一个密码合法性检查的小功能。该网站要求用户设置的密码必须由不少于6个字符组成,并且只能有英文字母、数字和小数点 .,还必须既有字母也有数字。输入格式:输入第一行给出一个正整数 N(≤ 100),随后 N 行,每行给出一个用户设置的密码,为不超过 80 个字符的非空字符串,以回车结束。输出格式:对每个用户的密码,在一行中输出系统反馈信息,分以下5种:如果密码合法,输出 Your password is wan mei.;如果密码太短,不论合法与否,都原创 2020-11-22 11:56:04 · 903 阅读 · 0 评论 -
蓝桥杯 回文日期:模拟
题目描述:在日常生活中,通过年、月、日这三个要素可以表示出一个唯一确定的日期。牛牛习惯用 8 位数字表示一个日期,其中,前 4 位代表年份,接下来 2 位代表月份,最后 2 位代表日期。显然:一个日期只有一种表示方法,而两个不同的日期的表示方法不会相同。牛牛认为,一个日期是回文的,当且仅当表示这个日期的8位数字是回文的。现在,牛牛想知道:在他指定的两个日期之间(包含这两个日期本身),有多...原创 2020-04-13 22:14:20 · 1266 阅读 · 1 评论 -
蓝桥杯 错误票据:模拟,sstringstream的用法
题目描述:某涉密单位下发了某种票据,并要在年终全部收回。每张票据有唯一的ID号。全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号。你的任务是通过编程,找出断号的ID和重号的ID。假设断号不可能发生在最大和最小号。输入格式第一行包含整数 N,表示后面共有 N 行数据。接下来 N 行,...原创 2020-04-13 22:09:04 · 143 阅读 · 0 评论 -
蓝桥杯 递增三元组:前缀和 模拟
题目描述:给定三个整数数组A=[A1,A2,…AN],B=[B1,B2,…BN],C=[C1,C2,…CN],请你统计有多少个三元组 (i,j,k) 满足1≤i,j,k≤NAi<Bj<Ck输入格式第一行包含一个整数 N。第二行包含 N 个整数 A1,A2,…AN。第三行包含 N 个整数 B1,B2,…BN。第四行包含 N 个整数 C1,C2,…CN。输出格式...原创 2020-04-13 21:51:19 · 137 阅读 · 0 评论 -
蓝桥杯 连号区间数:枚举
题目描述:小明这些天一直在思考这样一个奇怪而有趣的问题:在 1∼N 的某个排列中有多少个连号区间呢?这里所说的连号区间的定义是:如果区间 [L,R] 里的所有元素(即此排列的第 L 个到第 R 个元素)递增排序后能得到一个长度为 R−L+1 的“连续”数列,则称这个区间连号区间。当 N 很小的时候,小明可以很快地算出答案,但是当 N 变大的时候,问题就不是那么简单了,现在小明需要你的帮助...原创 2020-04-13 21:22:02 · 171 阅读 · 0 评论 -
蓝桥杯数学类试题 整理
蓝桥杯历年真题 买不到的数目 蚂蚁感冒 饮料换购 题解 数学专题原创 2020-04-07 12:06:51 · 418 阅读 · 0 评论 -
蓝桥杯 PREV-40 历届试题 K倍区间
资源限制时间限制:2.0s 内存限制:256.0MB问题描述给定一个长度为N的数列,A1, A2, … AN,如果其中一段连续的子序列Ai, Ai+1, … Aj(i <=j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间。你能求出数列中总共有多少个K倍区间吗?输入格式第一行包含两个整数N和K。(1 <= N, K <= 100000) ...原创 2020-03-31 11:33:51 · 111 阅读 · 0 评论 -
前缀和算法精讲
一维前缀和:适用题型:对于长度为 n 的序列,进行 m 次询问,每次查询区间 [L, R] 之间的数的和,朴素做法的复杂度为 n * m,而使用前缀和就将复杂度将为了 m 。已知a[1], a[2], ..., a[i] 则前缀和数组 s[1] = a[1], s[2] = s[1] + a[2], s[i] = s[i-1] + a[i] (规定s[0] = 0)那么,对于每次询问,s...原创 2020-03-31 10:41:14 · 303 阅读 · 0 评论 -
蓝桥杯 递归:猜算式
一道比较简单的题,但是让我深深的记住了递归的板子。顺便在此回顾一下递归。#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>typedef long long LL;using namespace std;const int MAXN = 1...原创 2020-03-26 21:48:29 · 302 阅读 · 0 评论 -
第七届蓝桥杯 四平方和
四平方和:题目描述:四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多 4 个正整数的平方和。 如果把 0 包括进去,就正好可以表示为 4个数的平方和。 比如: 5=02+02+12+22 7=12+12+12+22 对于一个给定的正整数,可能存在多种平方和的表示法。 要求你对4 个数排序: 0≤a≤b≤c≤d 并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,最后...原创 2020-03-26 20:39:13 · 198 阅读 · 0 评论 -
二分:机器人跳跃问题 头条2019笔试题
题目搬运自:[AcWing 今日头条2019笔试题](https://www.acwing.com/problem/content/732/)题目描述机器人正在玩一个古老的基于DOS的游戏。 游戏中有N+1座建筑——从0到N编号,从左到右排列。 编号为0的建筑高度为0个单位,编号为 i的建筑高度为H(i)个单位。 起初,机器人在编号为0的建筑处。 每一步,它跳到下一个(右边)建筑。假设机...原创 2020-03-26 16:24:14 · 343 阅读 · 0 评论