PAT
PAT算法记录
不考到PAT不改名
啥都不会慢慢学
展开
-
PAT 1020 Tree Traversals
题目描述 英文 中文大意 给定二叉树的后序遍历 和 中序遍历序列,请输出二叉树的层次遍历 注意:我们假定二叉树中节点的值都是 唯一的正整数 第一行输入为 N,第二行为后序遍历,第三行为 中序遍历 N<=30 样例 思路分析 此问题分为三个部分 通过后序遍历 和 中序遍历 构建二叉树 层次遍历此二叉树 分析后序遍历和中序遍历,我们发现: 后序遍历的最后一个节点必定是root,我们根据root可以把中序遍历分为 左子树 和 右子树,如此便可构建一个二叉树 code #include <原创 2020-06-21 10:44:39 · 121 阅读 · 0 评论 -
PAT 1019 General Palindromic Number
题目描述 英文 中文大意 老生常谈,回文串。 输入N 和 b,N在b进制下是否是回文数? 如果是,则输出Yes,否则输出No 并在下一行(无论它是不是)都输出 N 在 b进制下的数 样例 思路分析 首先把N转换为b进制,然后传入判断是否是回文串 判断是否回文串使用 双指针 需要注意的点: N的范围是 0<N<109 没有超出int的表示范围,所以没有必要使用long 类型来表示 所以数组的范围以2进制来计算,也只需30位即可表示全部 -2147483648~2147483647[-231 ~原创 2020-06-20 09:23:05 · 110 阅读 · 0 评论 -
PAT 1017 Queueing at Bank
题目描述 英文 中文大意 输入N个用户, 现有K个窗口,计算这些用户的平均等待时间 已知客户的 到达时间 和 需要的服务时间,按照先来先服务的原则进行服务 银行的服务时间为 08:00 - 17:00,如果在 08:00 之前来了,就等到08:00,如果在17-01 及之后来了,那就不能再被服务 样例 思路分析 构建一个 struct 来存储客户的 到来时间 和 服务时间,然后按照到来时间进行排序,此处用了 <algorithm> 的 sort 函数。 然后参考 柳神的博客,维护了一个 优先原创 2020-06-17 10:05:34 · 104 阅读 · 0 评论 -
PAT 1015 Reversible Primes
题目描述 英文 中文大意 给定任意两个正整数 N(<105) D (1 < D <= 10) 请指出它是否是基于进制D 的 逆转素数 逆转素数:本身是素数,转换为D进制后,逆转,再转换为10进制,观察是否还是素数 输入 每行输入包括 N, D,输入结束于一个 负数N 输出 对于每行的输入用例,如果是 逆转素数,输出 Yes,否则输出No 样例 思路分析 判断素数的方法,能否效率更高? 进制转换时注意 顺序 和 起始位置 判断素数的方法: #include <math.h>原创 2020-06-15 09:14:43 · 99 阅读 · 0 评论 -
PAT 1013 Battle Over Cities
题目描述 英文 中文大意 给定一个城市图,指出多少条高速公路需要被修复 举例:有3个城市 c1, c2, c3 2条公路连接 c1, c2 和 c1, c3 如果把c1 从图中移去,我们就需要修复 1 条公路来连接 c2, c3 输入 第一行包含 3个数字:N(<1000), M, K N:城市数量 M:剩余公路数量 K:被检查城市数量 接下来的 M 行用两个整数描述 高速公路 最后一行包含 K 个数字,展示了我们在意的城市节点 输出 对于 K 个城市而言,如果这个城市节点丢失了,在一行内输出我们书原创 2020-06-14 09:15:13 · 104 阅读 · 0 评论 -
PAT 1012 The Best Rank
题目描述 英文 中文大意 样例 思路分析 code 题目链接 1012 The Best Rank (25分)原创 2020-06-13 09:55:13 · 119 阅读 · 1 评论 -
PAT 1011 World Cup Betting
题目描述 英文 中文大意 输入三场比赛,每场比赛三个赔率 分别对应 W T L 找出每场比赛的最大赔率点,并输出它,并在最后通过给定的公式计算一下 (ans * 0.65 - 1) * 2 样例 思路分析 本题是水题,没什么难度,最主要就是看懂英文 code #include <iostream> #include <stdio.h> using namespace std; char s[3] = {'W', 'T', 'L'}; char c[3]; int main()原创 2020-06-11 09:12:54 · 91 阅读 · 0 评论 -
PAT 1009 Product of Polynomials
题目描述 英文 中文大意 输入两个多项式,按格式输出这两个多项式的乘积 第一位都代表 多项式中非零项的个数 如 2 1 2.4 0 3.2 表示 2.4x + 3.2 其中 指数K 的范围在 [1,10],系数N的范围在 [0, 1000] 同样的精确到小数点后1位 样例 思路分析 类似于1002 A+B 思路可以仿照它 按照规定的思路走,其实还是暴力法 需要注意的点: cnt 计数需要单独遍历一遍 注意输出的是 非零项 这道题目也可以用map 不过1002用了这里就用常规的方法吧,万一以后上机不让用原创 2020-06-10 09:32:44 · 126 阅读 · 0 评论 -
PAT 1008 Elevator
题目描述 英文 中文大意 电梯最开始在0层,上升需要 6s,下降需要 4s,到一层停止需要 5s,最后运行完后不会返回 0层,现给定一个输入序列,计算电梯运行时间 样例 思路分析 遍历即可,用一个past遍历存储上次电梯停留的层数 与要去的层数 now 比较,根据大小不同加上不同的时间。 且除了序列最后一次运行,都需要停留 5s 初始设 past = 0 code #include <cstdio> int main(){ int n, past = 0, time = 0, ans原创 2020-06-09 09:20:27 · 103 阅读 · 0 评论 -
PAT 1006 Sign In and Sign Out
题目描述 英文 中文大意 接收一个正整数M表示接下来输入的职工人数 接下来的M行会依次输入 职工ID、达到时间、离去时间 时间格式为 HH:MM:SS 并且ID_number不超过 15个字符 样例 思路分析 无需引入时间工具, 时间格式已经确定所以直接使用string 然后初始化 lock 和 unlock 分别为范围内的 最早 和 最晚时间, 变输入边比较即可 code #include <iostream> using namespace std; int main() {原创 2020-06-09 09:12:54 · 154 阅读 · 0 评论 -
PAT 1005 Spell It Right
题目描述 英文 中文大意 输入一个非负整数 N 输入它的各个位数的和, 并且按高位到低位的顺序以英文展示 注意:N <= 10100 显然它的位数是 <= 101 的(102 <= 3位) 样例 思路分析 注意点有两个 输入N为非负整数 说明有可能输入为 0 需要处理特情 计算后需要从高位到低位按需输出——需要使用 栈 引入stack code #include <iostream> #include <cstring> #include <stac原创 2020-06-09 09:11:16 · 115 阅读 · 0 评论 -
PAT 1004 Counting Leaves
题目描述 英文 中文大意 通过输入的树找出 每一层有多少个叶子节点 样例输出 思路分析 用 dfs 深度优先遍历, 大致思路是寻找叶子节点, 如果找到在 record[] 数组对应的深度depth 加一 理解一下各个输入 N: 节点个数 M: 非叶子节点个数 ID: 非叶子节点标识 K: 此节点的儿子节点数 ID[i]: 此节点的儿子节点 首先接受 N、M, 叶子节点不用统计,所以根据M 获取节点 把每个节点的子节点都存入 vector[index] 通过判断vector[index].size()原创 2020-06-09 09:09:18 · 93 阅读 · 0 评论 -
PAT 1002 A+B for Polynomials
题目描述 英文 中文大意 计算两个A、B 多项式的和 输入 每个样例包含两行, K N1 aN1 N2 aN2 … NK aNK K是多项式中非零项的个数, Ni aNi 是指数和系数 其中K的范围在 [1, 10] 指数和系数的的范围在 [0, 1000] 输出 对于每个输出样例, A、B 的和都应该占据一行。 需要注意的是不允许在每行末尾添加额外的空格 请精确到小数点后一位 思路分析 比较常规的写法是用两个数组存储然后 指数存放在下标, 系数存放在值。 而且完全可以精简到一个数组, 但是要空间换时原创 2020-06-09 09:06:53 · 131 阅读 · 0 评论 -
PAT 1001 A+B Format
题目描述 英文 中文大意 计算并以一种标准格式输出 a + b的值,该数字必须被 , 分割成组(除非少于4位数字) 输入 每个输入样例包含一对整数 a 和 b, a、b的大小位于 -106 和 106 之间, 数字之间有一个空格来分割 输出 对于每个输出样例,你应该在一行之内以特定格式输出a、b的和 输出样例 思路分析 主要就是注意 - 号的处理和添加 , 本题并没有什么明显难度 代码 #include <iostream> using namespace std; int main()原创 2020-06-09 08:57:07 · 122 阅读 · 0 评论 -
PAT 1007 Maximum Subsequence Sum
题目描述 英文 中文大意 给定 K 个整数序列,获取它的最大子序列之和 在一行内首先输出最大子序列之和,并输出子序列的头和尾 如果最大子序列不是唯一,输出最小的 i、j 的组合 如果全部 K 个整数 都是负数——你应该输出最大值为 0 i、j 为第一个和最后一个的索引 样例 思路分析 看子序列问题,首先想到滑动窗口,但是好像行不通 暴力法不考虑 思考动态规划 设定一个临时值temp 来存储目前的子序列和 设定一个标志变量flag 来判断,如果所有的seq中的数都是负数,则输出特情 code #inclu原创 2020-06-08 10:55:06 · 106 阅读 · 0 评论