PAT
文章平均质量分 70
吹风的四月
这个作者很懒,什么都没留下…
展开
-
PAT (Advanced) 1012. The Best Rank (25)
原题:1012. The Best Rank (25)解题思路:1.按照题意对每种成绩进行排序, 然后进行排名即可2.排名时注意,成绩相同者排名相同,而成绩相同者向后第一位不同者,排名应该为前面的人数总和加一,如:99 98 98 98 97 ,第一个人为第一, 第二、三、四个人并列第二, 第五个人为第五。C++代码如下:#include#in原创 2017-09-13 21:05:46 · 145 阅读 · 0 评论 -
PAT (Advanced) 1002.A+B for Polynomials (25)
原题:1002. A+B for Polynomials (25)思路:1.可开辟相应的数组a[n],b[n],c[n]来存储两个多项式和最终结果,a[i]保存相应的i次项的系数。2.统计c[n]中系数不为0的项获得其项数。注:为了优化空间可以只开辟一个保存结果的数组c[n],在多项式输入后直接累加到c[n]中即可。c++代码如下#include#incl原创 2017-09-06 20:12:19 · 184 阅读 · 0 评论 -
PAT (Advanced) 1013. Battle Over Cities (25)
原题:1013. Battle Over Cities (25)解题思路:1.图的遍历问题,基本方法是BFS(广度优先遍历)或者DFS(深度优先遍历)。2.对于本题的解法,实际上可以转化为求其连通分量的个数,而答案为连通分量个数减一,详情可以参考代码。C++代码如下:#include#include#includeusing原创 2017-09-14 21:53:13 · 163 阅读 · 0 评论 -
PAT (Advanced) 1018. Public Bike Management (30)
原题:1018. Public Bike Management (30)解题思路:1.题目是最小路径问题,采用Dijkstra算法。2.题目中路径的判优条件十分复杂,于是改变思路,先求出所有距离相同的路径,再通过DFS算法遍历所有可能路径,求出最优路径。DFS中判优流程如下:将车站分为三类:(1)车子多于当前要求,将多于的车子加入remain;(2)车子原创 2017-09-23 22:20:30 · 172 阅读 · 0 评论 -
PAT (Advanced) 1019. General Palindromic Number (20)
原题:1019. General Palindromic Number (20)解题思路:1.将给定的数按给定基数分解存入数组2.判定数组是否对称C++代码如下:#include#includeint num[200];int cnt;//保存位数//转换为数组void change(int n, int base){ if(原创 2017-09-23 22:56:34 · 168 阅读 · 0 评论 -
PAT (Advanced) 1003. Emergency (25)
原题:1003. Emergency (25)典型的最小路径问题,注意以下即可:1.需设置一个数组记录到当前点的最小路径数,更新最小路径时,继承上一点的路径数即可,最小路径长度相等时,需要加上上一点的路径数。2.需额外设置一个数组记录救护队的数目,并作为第二判断依据,在路径相等时,取最大值即可。注:Dijkstra算法的大致流程:设定两个点集,一个为访问过的,一个为原创 2017-09-07 20:48:04 · 438 阅读 · 0 评论 -
PAT (Advanced) 1020. Tree Traversals (25)
原题:1020. Tree Traversals (25)解题思路:1.按照后续遍历和中序遍历序列递归生成相应的树,再按层序遍历输出即可;2.有关根据中序遍历和后续遍历获取树的方法可参考数据结构参考书。C++代码如下:#include#include#includeusing namespace std;const int原创 2017-09-24 23:27:04 · 152 阅读 · 0 评论 -
PAT (Advanced) 1021. Deepest Root (25)
原题:1021. Deepest Root (25)解题思路:1.第一步采用广度优先遍历计算连通分量数目。2.若连通分量只有一个,对所有的点进行广度优先搜索,每次返回对应的树的最大深度,最后把深度最大的树的根输出注:题目数据较大,用邻接表存储图。C++代码如下:#include#include#include#includeusing原创 2017-09-25 00:07:18 · 135 阅读 · 0 评论 -
PAT (Advanced) 1004. Counting Leaves (30)
原题:1004. Counting Leaves (30)典型的树的层序遍历问题,用层序遍历或者广度优先搜索方法解决:1. 用vector动态记录每个点的孩子的数目。2.赋予相应的层号,在遍历中每当层号发生变化,说明该层遍历结束,应记录统计值。c++代码如下:#include#include#include#includeusin原创 2017-09-08 21:43:16 · 167 阅读 · 0 评论 -
PAT (Advanced) 1005. Spell It Right (20)
原题:1005. Spell It Right (20)思路如下:1.将英文字符串与数字对应做好表格2.求出sum, 再分解sum, 最后根据表格输出3.注意 0 的特殊处理c++代码如下:#include#include#includeusing namespace std;char a[110];char table[10][10] =原创 2017-09-09 20:14:48 · 150 阅读 · 0 评论 -
PAT (Advanced) 1006. Sign In and Sign Out (25)
原题:1006. Sign In and Sign Out (25)解题思路:1.设计一个结构体保存相应的id, 签到时间和签退时间。2.分解根据签到时间和签退时间的早晚, 设计相应的排序依据的函数, 用sort函数进行排序后, 输出相应的id即可。c++代码如下:#include#includeusing namespace std;const原创 2017-09-09 20:33:48 · 199 阅读 · 0 评论 -
PAT (Advanced) 1007. Maximum Subsequence Sum (25)
原题:1007. Maximum Subsequence Sum (25)解题思路:1.设A[n]为对应的保存原始序列a[n]的以每个元素为结尾的子序列的和, 初始化时与a[n]相同, 同时设定一个len[n]记录每个子序列的长度。2.由题设求最大子序列和,则将每个A[i](0 3.每个A[i]的求解,A[i]与A[i-1] 有如下关系:A[i] = max(A原创 2017-09-09 20:52:29 · 142 阅读 · 0 评论 -
PAT (Advanced) 1008. Elevator (20)
原题:1008. Elevator (20)解题思路:1.按题意模拟即可。C++代码如下:#include#includeusing namespace std;int main(){ int n; while(scanf("%d", &n) != EOF) { int now = 0;原创 2017-09-10 20:32:05 · 162 阅读 · 0 评论 -
PAT (Advanced) 1009. Product of Polynomials (25)
原题:1009. Product of Polynomials (25)解题思路:1.设置三个数组分解保存结果和输入的多项式, 按多项式乘法算出结果即可。C++代码如下:#include#includeusing namespace std;double a[1001], b[1001], c[2001]; //注意结果数组要更大int main(原创 2017-09-10 21:15:37 · 156 阅读 · 0 评论 -
PAT (Advanced) 1014. Waiting in Line (30)
原题:1014. Waiting in Line (30)解题思路:1.可以确定一个顾客在加入队伍时,服务结束的时间就已经决定。2.顾客是按顺序到达,但是没有时间间隔,所以只要有窗口前队伍未满,就会加入。3.由此可以将顾客分为两类,第一类是在窗口全满前到达,第二类是在之后到达的。4.第一类直接加入队伍,并刷新队伍最后一个人结束的时间,借此获取每个顾客的结束时间。原创 2017-09-18 22:52:52 · 376 阅读 · 0 评论 -
PAT (Advanced) 1001. A+B Format (20)
原题:1001. A+B Format (20)解题思路:1.将数字直接转换成反向的字符串,在适当位置加入逗号即可;2.字符串从0开始计数,逗号位置分别为 3, 7,11 , 15…… 可发现对每个逗号出现的位置 i ,有 i % 3 在 0, 1, 2 三个数间循环,以此添加逗号即可3.0 要特殊处理;C++代码如下:#inc原创 2017-09-18 23:18:52 · 361 阅读 · 0 评论 -
PAT (Advanced) 1010. Radix (25)
原题:1010. Radix (25)解题思路:题目思路其实很简单, 转成十进制比大小即可,但是题中数据范围没有给,需要考虑到溢出等很多细节:1.要算的基数应大于等于该数的每位数中的最大值加一。2.在计算途中出现溢出要单独考虑。3.尽量用long long保存数据,我一开始用int型导致一直有几个测试点过不去。4.在查找基数时用二分, 不然会超时。原创 2017-09-11 20:07:57 · 173 阅读 · 0 评论 -
PAT (Advanced) 1011. World Cup Betting (20)
原题:1011. World Cup Betting (20)解题思路:把代码写好看点吧~C++代码如下:#include#includeusing namespace std;double a[3][3];int ansChoice[3];char c[3] = {'W', 'T', 'L'};int main(){ for(原创 2017-09-12 20:06:08 · 167 阅读 · 0 评论 -
PAT (Advanced) 1016. Phone Bills (25)
原题:1016. Phone Bills (25)解题思路:1.按照题目的意思,首先将每个人的记录按照时间排序。2.两条有效的记录必然相邻,详细的模拟过程参考代码注释。C++代码如下:#include#include#includeusing namespace std;const int maxn = 1010;struct cust原创 2017-09-20 23:45:12 · 135 阅读 · 0 评论 -
PAT (Advanced) 1015. Reversible Primes (20)
原题:1015. Reversible Primes (20)解题思路:按题意逆置数字,在判断两个数是否都为素数即可。C++代码如下:#includeint num[30];int reverseNum(int n, int radix){ int cnt = 0; while(n > 0) { num原创 2017-09-19 23:03:09 · 250 阅读 · 0 评论 -
PAT (Advanced) 1017. Queueing at Bank (25)
原题:1017. Queueing at Bank (25)解题思路:1.将所有顾客的时间转化为相对00:00 : 00 的秒, 然后进行排序。2.每次寻找最早结束的窗口分配给当前顾客,计算等待时间。3.按照顾客到达时间进行动态更新服务窗口的结束时间,注意过滤17:00:00以后来的顾客。注:当没有顾客时直接输出0.0; 寻找最早服务结束的窗口时,注意把原创 2017-09-21 23:18:09 · 152 阅读 · 0 评论 -
PAT (Advanced) 1024. Palindromic Number (25)
原题:1024. Palindromic Number (25)解题思路:按题目意思处理数据即可,题目数字比较大,要采用字符串来处理,c++容器会提供很大帮助,虽然速度会稍慢,详情见代码。C++代码如下:#include#include#includeusing namespace std;string str;string add(stri原创 2017-12-31 15:46:33 · 133 阅读 · 0 评论 -
PAT (Advanced) 1025. PAT Ranking (25)
原题:1025. PAT Ranking (25)解题思路:简单的模拟,对每一组数据进行排序,记录考场排名,最后对所有数据进行排序,记录最终排名c++代码如下:#include#include#include#include#includeusing namespace std;struct Student{ char id[15];原创 2018-01-01 21:36:30 · 166 阅读 · 0 评论 -
PAT (Advanced) 1022. Digital Library (30)
原题:1022. Digital Library (30)思路:一道稍微有点复杂的模拟题,用map模拟按内容查找即可,除关键字需要特殊处理,其余均记录书本号即可。注:由于输出需要,可以用set进行自动排序。具体代码如下:#include#include#include#include#include#include#includeusing n原创 2017-12-27 17:17:22 · 130 阅读 · 0 评论 -
PAT (Advanced) 1023. Have Fun with Numbers (20)
原题:1023. Have Fun with Numbers (20)解题思路:给的数字比较大,用高精度整数解决即可。代码如下:#include#includeusing namespace std;const int N = 10;int main(){ int a[N], b[N]; for(int i = 0; i <原创 2017-12-29 11:42:52 · 121 阅读 · 0 评论 -
PAT (Advanced) 1026. Table Tennis (30)
原题:1026. Table Tennis (30)解题思路:相当复杂的模拟题,而且隐藏的条件很多。1.注意输入数据的处理,把时间统一成秒会方便很多。2.将顾客按到达时间排序后,按顺序处理,注意维护一个vip顾客的队列,每次找出最早空出来的桌子。3.我将情况分为了以下四种分别处理(以下所说顾客均为队首且未被服务过的顾客,桌子均为找到的最早空闲的桌子): 1) 顾客为vip, 桌子为vip :...原创 2018-02-26 18:20:19 · 174 阅读 · 0 评论 -
PAT (Advanced) 1027. Colors in Mars (20)
原题:1027. Colors in Mars (20)解题思路:一开始想用字符串string来保存结果,但实现途中发现又要考虑特殊情况0,又要反转,还要考虑只有一位数的情况,虽然通过了,但是极度麻烦,也费时间,于是重新构思。既然只有两位数,那干脆把对应位置上的13进制数保存下来,再输出对应的表示字符即可,这样便能统一各种情况的操作。代码如下:#include<cstdio>#inc...原创 2018-02-26 20:24:45 · 111 阅读 · 0 评论 -
PAT (Advanced) 1029. Median (25)
原题:1029.Median (25)解题思路:第一种想到的解法是二分查找,但是来点创意总是好的,这时候归并的思路就来了。我们知道归并排序将子序列合成的过程就是一个比较两个有序子序列的头的过程,那么正好可以拿来处理这道题。设置一个计数器,每舍弃一个数,计数器加一,当加到mid时,输出当前舍弃的数即可。时间复杂度为O(n),额外的空间复杂度为O(1),完全可接受。代码如下:#include<c...原创 2018-02-26 21:23:43 · 101 阅读 · 0 评论 -
PAT (Advanced) 1058. A+B in Hogwarts (20)
原题:1058. A+B in Hogwarts (20)解题思路:直接算。代码如下:#include<cstdio>#include<algorithm>using namespace std;int a[3], b[3], c[3];int main(){ while(scanf("%d.%d.%d %d.%d.%d", &a[0], &a...原创 2018-03-06 20:41:34 · 108 阅读 · 0 评论 -
PAT (Advanced) 1059. Prime Factors (25)
原题:1059. Prime Factors (25)解题思路:用筛法先把可能用到的素数找出来,再用求得的素数去除原数,获取结果即可。#include<algorithm>#include<cstdio>#include<cstring>#include<vector>#include<cmath>using namespace...原创 2018-03-06 21:18:55 · 125 阅读 · 0 评论 -
PAT (Advanced) 1060. Are They Equal (25)
原题:1060. Are They Equal (25)解题思路:用字符串按题意处理即可。代码如下:#include<iostream>#include<string>#include<cstdio>using namespace std;string solve(string s, int& cnt, int k) //cnt为指数{ ...原创 2018-03-06 22:24:13 · 92 阅读 · 0 评论 -
PAT (Advanced) 1061. Dating (20)
原题:1061. Dating (20)解题思路:看似简单的题,坑不少。首先表示星期的为 A 到 G,其次表示时的为A到N, 表示成A到Z就错了。代码如下:#include<cstdio>#include<algorithm>#include<cstring>#include<cctype>using namespace std;char ...原创 2018-03-07 13:47:01 · 107 阅读 · 0 评论 -
PAT (Advanced) 1062. Talent and Virtue (25)
原题:1062. Talent and Virtue (25)解题思路:按题目要求一步一步排序即可。代码如下:#include<cstdio>#include<algorithm>#include<cstring>using namespace std;const int maxn = 100000 +5;struct Student{ in...原创 2018-03-07 13:48:04 · 98 阅读 · 0 评论 -
PAT (Advanced) 1063. Set Similarity (25)
原题:1063. Set Similarity (25)解题思路:本质上是求交集与并集大小的比值。题目要求每个集合实际上是没有重复元素的,所以第一步,对每个集合进行去重。找相同元素时,只要合并两个集合并且去重(unique函数去重会把重复元素放在最后,可以以此找到重复元素)求出百分比即可。代码如下:#include<cstdio>#include<algorithm>#...原创 2018-03-07 13:48:49 · 130 阅读 · 0 评论 -
PAT (Advanced) 1064. Complete Binary Search Tree (30)
原题:1064. Complete Binary Search Tree (30)解题思路:考察二叉搜索树和完全二叉树的性质,实际上所有数据从小到大就是二叉搜索树的中序遍历,而完全二叉树用数组保存又有左右子树的编号为root*2与root*2+1的性质,并且用数组保存的完全二叉树中间是不会有空结点的,应用这两个性质递归构造完全二叉树即可。代码如下:#include<cstdio>#i...原创 2018-03-07 14:10:44 · 152 阅读 · 0 评论 -
PAT (Advanced) 1065. A+B and C (64bit) (20)
原题:1065. A+B and C (64bit) (20)解题思路:把所有溢出的情况考虑好就可以了。代码如下:#include<cstdio>int main(){ long long a, b, c; int n; while(scanf("%d", &n) == 1) { for(int i = 1; i <=...原创 2018-03-07 14:54:46 · 110 阅读 · 0 评论 -
PAT (Advanced) 1030. Travel Plan (30)
原题:1030. Travel Plan (30)解题思路:运用dijkstra算法找到最短路即可,只不过要在找最短路的同时注意路径等长时选择花费较小的路, 同时记录路径。代码如下:#include<cstdio>#include<algorithm>#include<cstring>#include<vector>#include<q...原创 2018-02-27 17:45:50 · 139 阅读 · 0 评论 -
PAT (Advanced) 1031. Hello World for U (20)
原题:1031. Hello World for U (20)解题思路:暴力求个n1, n2,按要求输出即可, 详情见代码。代码如下:#include<iostream>#include<string>using namespace std;int main(){ string s; while(cin >> s) { ...原创 2018-02-27 18:02:56 · 155 阅读 · 0 评论 -
PAT (Advanced) 1032. Sharing (25)
原题:1032. Sharing (25)解题思路:静态链表的操作,找链表相同后缀,只需求出两条链表的长, 将长的链表上的指针先走到后缀和短链表长度一致时,再两个链表同时走,直到找到相同的结点。注意空表的处理。代码如下:#include<cstdio>const int maxn = 100000 + 5;struct Node{ char c; int next...原创 2018-02-27 18:33:01 · 107 阅读 · 0 评论 -
PAT (Advanced) 1066. Root of AVL Tree (25)
原题:1066. Root of AVL Tree (25)解题思路:对于AVL树的考察,原理实际上很简单,关键在于左旋和右旋的实现,这种指针的操作最好的理解办法还是画出来,然后一步步去实现。代码如下:#include<algorithm>#include<cstdio>#include<cstring>using namespace std;stru...原创 2018-03-07 18:08:23 · 133 阅读 · 0 评论