PAT
文章平均质量分 60
PAT 刷题笔记
「江太白」
愿云淡风轻 仰望天空皆是星光荧荧
展开
-
L3-012 水果忍者 (30 分) 动态图解枚举过程
2010年风靡全球的“水果忍者”游戏,想必大家肯定都玩过吧?(没玩过也没关系啦~)在游戏当中,画面里会随机地弹射出一系列的水果与炸弹,玩家尽可能砍掉所有的水果而避免砍中炸弹,就可以完成游戏规定的任务。如果玩家可以一刀砍下画面当中一连串的水果,则会有额外的奖励,如图1所示。图 1现在假如你是“水果忍者”游戏的玩家,你要做的一件事情就是,将画面当中的水果一刀砍下。这个问题看上去有些复杂,让我们把问题简化一些。我们将游戏世界想象成一个二维的平面。游戏当中的每个水果被简化...原创 2021-07-20 01:55:20 · 1514 阅读 · 8 评论 -
【直捣黄龙】多条件+最短路径计数的Dijkstra(朴素与堆优化)
文章目录问题引入题目分析朴素Dijkstra堆优化Dijkstra在阅读本博客之前需要先对Dijkstra算法有一定的了解。往常的Dijkstra一般都是以路径长度作为单一的权重,但是如果要求存在路径相同时取通过费用最少、如果通过费用还一样就取用最新修建的道路等等可以叠加无限多个条件。除此之外,还会要求如果A到X有多条最短路径,就要输出最短路径的条数。问题引入本问题取自PAT天梯赛直捣黄龙【点击此处访问】本题是一部战争大片 —— 你需要从己方大本营出发,一路攻城略地杀到敌方大本营。首先时间就原创 2021-07-18 09:56:52 · 615 阅读 · 3 评论 -
L2-1 弹珠传说 (25 分)
现在有一个弹珠游戏,弹珠从横坐标为S的点掉落,下方依次有n(1 <= n <= 50000)个挡板,左右端点的横坐标为l[i]和r[i] (-100000 <= l[i] < r[i] <= 100000),弹珠落在挡板上你可以选择向左或者向右,直到弹珠落地,滚向位于横坐标为零的终点,请你求出弹珠水平运动的最小路程。输入格式:第一行输入n和s接下来n行依次为从上到下的挡板的l[i]和r[i]输出格式:输出弹珠水平运动的最小路程输入样例:在这里给出一组输入原创 2021-04-11 00:55:04 · 274 阅读 · 0 评论 -
L1-8 牛的对称 (20 分)
农场主约翰喜爱对称的事物,眼下他准备把他牧场里的牛放置到N∗M(1≤N≤1,000,000,000;1≤M≤1,000,000,000)的格子里。为了保持对称性,他用下面的方法放置牛。先放一只牛到牧场的中心格子,如果没有这样的中心格子,他就停止他放置的工作。然后他将牧场分割成四个相同大小的区域(这四个区域被正中心的那只牛所在的行和列所分隔),并将牛用上面的方法安排到四个区域中。他不断地重复着他的分割直到没有中心方格存在或者牧场不能再被细分为止。看下面的例子,如果N=7,M=15,那么约翰将在第4行,第8列.原创 2021-04-10 21:08:05 · 741 阅读 · 0 评论 -
L1-7 小明打字 (20 分)
小明正使用Microsoft Word打一篇文档,文档只包含a-z的小写字母和空格,在打字过程中可能会一次或多次按下Home键、End键、←方向键、→方向键、Insert键、Backspace键。请编写程序,给定小明在键盘上按键的序列,输出小明屏幕上最终显示的文本。 提示:Home键会将当前光标移至文本开始位置,End键当前光标移至文本尾,←键和→键会使当前光标左移或右移一个位置(如果光标在文档头则无法左移,光标在文档尾则无法右移),Insert键会在插入和替换文本间切换(默认是插入状态),Backspac原创 2021-04-10 21:02:10 · 1320 阅读 · 0 评论 -
L1-6 佐罗与魔法石板 (15 分)
佐罗(Zorro)是一个传奇人物,出现在很多电影(小说、动画、电视剧)中,他经常用利剑划下Z字标记,让我们印象深刻。(出题者是不是暴露年龄了-_-#)佐罗发现了一块古老的石板,板上刻有若干个排成方阵的圆环,于是佐罗禁不住手痒,开始用剑在石板上划四种大小不同的Z字:上图分别展示了在5*5排列的石板上所划的这四种Z字,尺寸为2至5(横边的长度),例如:尺寸为3的Z字划过了7个圆环。佐罗划Z的动作是:从左上角开始,水平划至右端,再斜划至左下角,最后水平划至右端。这块石板其实是霍格沃茨学校的...原创 2021-04-10 20:51:43 · 691 阅读 · 1 评论 -
L1-5 重复变量名 (15 分)
西安工业大学是国家二级保密单位,常常接到一些军方保密项目。但是保密的项目要求很严格。1.不能使用自己的计算机,需要使用特配的。2.计算机不能接入互联网。3.代码的合并以及转移不能通过U盘,只能通过特定的光盘。4.代码的格式也有严格要求。以下为某次保密项目部分代码要求:小明完成了任务,但不知道自己的代码是否符合规范。你只需要帮他在这里判断重名最多的变量名称和它重复的次数。输入格式:第一行给出一个整数N(1<=n<=10),接下来N行,每行给出一行字符串S(长度<100)。所原创 2021-04-10 20:34:53 · 223 阅读 · 0 评论 -
L2-4 串的模式匹配
给定两个由英文字母组成的字符串 String 和 Pattern,要求找到 Pattern 在 String 中第一次出现的位置,并将此位置后的 String 的子串输出。如果找不到,则输出“Not Found”。本题旨在测试各种不同的匹配算法在各种数据情况下的表现。各组测试数据特点如下:数据0:小规模字符串,测试基本正确性; 数据1:随机数据,String 长度为10^5,Pattern 长度为10; 数据2:随机数据,String 长度为10^5,Pattern 长度为...原创 2021-04-07 15:06:14 · 135 阅读 · 0 评论 -
L2-3 超级玛丽
假定有n个城堡,编号为1至n,有的城堡之间有道路直接相连,有的城堡之间没有道路直接相连。马里奥现在准备从一个城堡出发前往另一个城堡,它有一个魔法棒,可以瞬时通过一条道路,即以0时间通过这条道路,但魔法棒最多只能用一次。马里奥想以最短的时间到达目的地,请编写程序为马里奥选定一条路线以及在什么地方使用魔法棒。假定所有道路为双向,保证从起点肯定能到达目的地。输入格式:输入第一行为4个整数n、s、t、m,分别表示城堡数(编号为1至n,n不超过10000),马里奥所在的起点s和想去的终点t,城堡间的道路数原创 2021-04-07 14:58:22 · 473 阅读 · 3 评论 -
L2-2 你究竟有几个好妹妹
小李的QQ列表里有很多联系人,他修改了所有人的备注姓名。其中有些联系人名字的前部或后部被加了诸如"好妹妹"的字样。请你打印出小李的所有的女性"好妹妹"。打印时请按照联系人原始名字升序排列,如果两人名字相同则年龄小的排在前面;如果两人年龄相同,则较早成为好友的排在前面。题目保证好妹妹标志不会同时出现在前缀和后缀,同一天里也不会添加名字相同并且年龄相同的"好妹妹"。输入格式:第一行给出标识好妹妹标志的字符串,该字符串内不包含空格,最大长度为6并且不区分大小写。第二行给出QQ列表的所有联系人个数n (1≤原创 2021-04-07 14:41:00 · 943 阅读 · 0 评论 -
L1-8 N进制高精度加法
到底应该怎样理解进制呢?首先得有“一个”的数量概念,然后就是这样的:把用来表示数量的符号依次排列,例如: q w e r然后定义最前面的符号为“零”,即“没有”,后面的符号表示的数量依次比前一个符号多“一个”进制就这样产生了: 例如当我们数数,依次数到 q w e r ,再往后数一个,符号不够用了,那么就写成 wq并且,我们把这种进制命名为“wq”进制。感觉怪异吗? 那么请换成我们熟悉的所谓“10”进制看看:我们的用于表示数量的符号依次是: 0 1 2 3 4 5 6 7 8 9 , 当数到9,原创 2021-04-07 14:24:33 · 418 阅读 · 0 评论 -
L1-7 To the Max
给出一个由正整数和负整数组成的二维数组,一个子矩形是指位于整 个数组中大小为1*1或更大的任何连续子数组。矩形的和是该矩形中所 有元素的和。在本题中,具有最大和的子矩形被称为最大子矩形。 例如,给出一个二维数组如下:0 -2 -7 09 2 -6 2-4 1 -4 1-1 8 0 -2最大子矩形是在左下角:9 2-4 1-1 8矩形的和是15。输入格式:输入给出一个N*N个整数组成的数组。输入的第一行给出一个正整数N,表示二维正方形数组的大小。后面给出用空白字原创 2021-04-07 14:05:38 · 304 阅读 · 1 评论 -
L1-4 简单四则运算
编写程序,对读入的一个简单的四则运算式进行计算。输入格式:正常情况下是两个整数中间用一个运算符分隔(运算符是+-*/之一,也可能是其它的错误输入),数据与运算符之间再无其它内容。输出格式:如果是正常的运算,直接输出运算结果,如果出现零作分母,输出Error0,如果出现了+-*/以外的错误运算符,输出Error1。输入样例1:18--2输出样例1:20输入样例2:18/0输出样例1:Error0思路:看题目觉得应该要考虑很多情况啊,比如说出现".原创 2021-04-07 13:25:44 · 2225 阅读 · 0 评论 -
铲屎官喂食
为了可持续发展,让别人也可用此题作为训练题,便不搬题目上来了。原题链接:https://pintia.cn/problem-sets/1375335383906332672/problems/1375380533974085632思路:利用Map容器存储小猫名字与最大最小推荐体重的关系(用了一个结构体包装,易于管理),所以本题考查的是字符串映射和数据归纳的能力,C++有很多STL可以加快我们的代码编写速度,例如map、vector、queue、stack等。见码知意,便不再赘述。参考代码原创 2021-03-27 16:22:23 · 156 阅读 · 0 评论 -
根结点到某结点的路径——模拟DFS过程
提示:只给出先序遍历,就能还原出一颗树?莫要逗我!诶,还真可以,为什么平时老师说必须要先序+中序才能还原一颗树(当然其他序也可以,仅做举例),是因为如果只给出先序遍历,不知道哪里应该在什么时候设置为空子树,也就是不知道该在什么地方终止往下递归。但是如果用#表示不能继续往下递归了,那不就是说明了如果我按照题目要求去先序遍历,如果要停止了就会告诉我停止,这样的二叉树不就是唯一的嘛?思路:模拟先序遍历过程,还原一颗树即可。所以依旧是模板题,在做了几道类似的题目后发现:如果只给出一种遍历..原创 2021-03-27 16:14:44 · 230 阅读 · 0 评论 -
最短路径-Dijkstra
输入样例:4 4 11 2 21 4 83 2 163 4 101输出样例:1->1:01->2:21->3:no path1->4:8思路:标题即思路,只需要熟记Dijkstra算法就可以把这道题做出来,关于Dijkstra算法网上的教程有很多,大家可以去学习一下。Dijkstra也算是PAT的一大考点,学会了Dijkstra最短路径就不怕了。本题目的节点数比较少,用Floyd算法应该是可以通过的,但其实在实战中,Floyd一般都会...原创 2021-03-27 15:59:17 · 173 阅读 · 0 评论 -
镇长修路
输入样例:在这里给出一组输入。例如:4 61 2 11 3 41 4 12 3 32 4 23 4 5输出样例:在这里给出相应的输出。例如:1,2,11,4,12,3,3思路:题目过目一遍,基本可以确认就是最小生成树的题目了,最小生成树那不是模板题吗?所以题目不难,结合并查集就可以做出这道题目了。唯一需要注意的是,题目为了输出的唯一性,要求依次优先考虑修建路程最短、道路1编号最小、道路2编号最小,因此只需要在原本的按照边排序中加入两个新要求就可以满足...原创 2021-03-27 15:51:00 · 361 阅读 · 5 评论 -
图的先广搜索
输入样例:6 8 21 22 33 44 55 66 43 61 5输出样例:2 3 1 6 4 5 思路:又是一道很经典的模板题,只需要套BFS模板即可,唯一的考点就是表头插入法构造邻接表,可能在平时做题的时候都是用邻接矩阵,所以不太熟悉邻接表构图法。参考《图和树的存储方式:邻接矩阵和邻接表》以了解邻接表和邻接矩阵,切莫搞混淆了。我们使用二维数组来模拟邻接表,只不过第二维度用的是vector容器罢了,这样可以达到插入新的连接点的目的了。(如果用队列...原创 2021-03-27 15:42:52 · 581 阅读 · 0 评论 -
优美的括号序列
某日,小明特别无聊,就想找点东西玩,于是他发现括号()特别好玩,而且新学会了一项技能,将一对小括号(),插入到一个括号序列中,其中插入的规则是,左括号'('的位置要小于右括号')'的位置,不要求插入的左右括号相邻,例如以下,为了方便区分,我们拿ab代表原括号序列将()插入到()中可形成()ab (a)b (ab) a()b a(b) ab()等等序列,其中a代表原括号序列的左括号,b代表原括号序列的右括号。小明认为一个括号序列是一个优美的序列当且仅当这个括号序列可以被如下方法构造出来:一原创 2021-03-27 15:21:20 · 1615 阅读 · 0 评论 -
火柴棍等式
这天,还在读小学的白白在地上摆弄着火柴,你上前问道,白白说“这是老师布置的作业,给了我14根火柴,问我们可以摆成多少个加法式子。”你哈哈大笑起来,为了让小屁孩刮目相看,你随手掏出笔记本电脑,啪啪啪地敲起来了。小孩看到你一下摆出了"0+7=7"、"1+2=3"、"1+7=8"……,立马开心地叫你大哥!小孩说班上每个同学的火柴数都不一样,你为了做孩子王,转身敲起了代码。现在给定你n根火柴,火柴摆放位置与数字的关系如下图所示请你找到所有满足A+B=C的等式,等式应满足以下四个条件:如果原创 2021-03-27 14:52:36 · 248 阅读 · 0 评论 -
L2-2 馅馅馅饼 (25 分)
Keven现在有很多个馅饼,不同口味和大小,他的朋友们都希望得到一块馅饼,注意,这应该是一块馅饼,而不是几块小馅饼,因为这看起来很乱。他的朋友们很烦人,如果他们中的一个比其他人得到更大的份额,他们就会开始抱怨。因此,他们都应该得到同样大小(但不一定是同样形状)的一块饼,即使这会导致一些馅饼被切开。当然,我也想要一块馅饼给我自己,那块馅饼也应该是同样大小的。我们能得到的最大面积是多少?所有的馅饼都是圆形的,高度忽略不计,但是馅饼的半径不相等。(每个人得到的饼形状不一定是圆形的,只要求饼是一整块并且原创 2021-03-21 15:15:43 · 240 阅读 · 0 评论 -
L2-4 父子局 (25 分)
总所周知,Keven永远都在峡谷之巅快乐。这次还拉上了dh打父子局,理所当然他们要输了。dh直接拉闸、拔网线一气呵成,熟练地让人心疼。Keven还不想放弃挣扎,他想问问你如何让他的网络和所有人取得连接,既他与任意网络直接都有一条通路,而且还要代价最小。简化问题为,有n个节点(从1到n编号,Keven txdy所以他是1号),有m条边相互连接,代价为Wi,j。问你让Keven和所以节点取得连接的最小代价。输入格式:第一行两个整数n,m(1<=n<=100000...原创 2021-03-21 13:49:22 · 188 阅读 · 0 评论 -
L2-1 榜单 (25 分)
Bear_2 在青青草原创办了第一届 BCPC 包含 k 道题,共有 n 支队伍参加比赛,共提交了 m 次。他想根据以下规则对队伍进行排名。1.过题数多的队伍优先2.在过题数相同的情况下,罚时越少的优先3.在过题数和罚时都相同的情况下,队伍编号小的优先。注:一道题目正确通过时,总罚时要加上正确通过的时候,再加上之前对这道题错误提交(没有通过所有测试数据的提交)的次数∗20min 。总罚时即为正确通过每道题目的时间和加上正确通过题目的错误提交罚时。举例:假设 X 队通过 K 题,每道题第一次正确提交原创 2021-03-21 12:43:36 · 302 阅读 · 0 评论 -
L1-8 雀魂majsoul (20 分)
大家都知道雀魂majsoul是一个麻将游戏ln的麻将功底相当高(魂天dalao),今天有个小学妹问他麻将怎么打才能胡大牌但是因为ln还要上国服第一,懒的回她所以他把问题抛给了你很简单,你只要判断题目给出的牌型能不能胡特定的牌型即可1.九莲宝灯只有一种类型的牌(条、饼、万)其中19各三张其他1张再加任何一张当前种类的牌即可2.七对子(七个不同的对子)3.国士无双需要条、饼(筒)、万的幺九牌(1和9共计6张)+所有的风牌(东西南北白发中7张)+前面的牌任意一张当然,有时候出千不可避免,所以你需.原创 2021-03-21 12:20:32 · 1201 阅读 · 1 评论 -
L2-2 完全二叉树的层序遍历
L2-2 完全二叉树的层序遍历一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树。对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的层序遍历的前 N 个结点,这样的树就是完全二叉树。给定一棵完全二叉树的后序遍历,请你给出这棵树的层序遍历结果。输入格式:输入在第一行中给出正整数 N(≤30),即树中结点个数。第二行给出后序遍历序列,为 N 个不超过 100 的正整数。同一行中所有数字都以空格分隔。输出格式:在一行中输出该树的层序遍历序列。所有数字都原创 2021-03-15 21:44:20 · 2356 阅读 · 3 评论 -
L1-7蛇皮走位,原题《CCF201412-2 Z字形扫描》
L1-7蛇皮走位,原题《CCF201412-2 Z字形扫描》在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan)。给定一个n×n的矩阵,Z字形扫描的过程如下图所示: 请实现一个Z字形扫描的程序,给定一个n×n的矩阵,输出对这个矩阵进行Z字形扫描的结果。评测用例规模与约定1≤n≤500,矩阵元素为不超过1000的正整数。输入格式:输入的第一行包含一个整数n,表示矩阵的大小。输入的第二行到第n+1行每行包含n个正整数,由空格分隔,表示给定的矩阵。输出格式:输出原创 2021-03-15 20:53:39 · 171 阅读 · 0 评论 -
2016年天梯赛初赛题集 7-12 关于堆的判断 (25分)
原题将一系列给定数字顺序插入一个初始为空的小顶堆H[]。随后判断一系列相关命题是否为真。命题分下列几种:x is the root:x是根结点;x and y are siblings:x和y是兄弟结点;x is the parent of y:x是y的父结点;x is a child of y:x是y的一个子结点。输入格式:每组测试第1行包含2个正整数N(≤ 1000)和M(≤ 20),分别是插入元素的个数、以及需要判断的命题数。下一行给出区间[−10000,10000]内的N个要被插入原创 2021-02-01 10:24:13 · 214 阅读 · 0 评论 -
2016年天梯赛初赛题集 7-11 玩转二叉树 (25分)
原题给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入样例:71 2 3 4 5 6 74 1 3 2 6 5 7输出样例:原创 2021-02-01 09:50:20 · 360 阅读 · 0 评论