PAT甲级
NJU_Flipped
这个作者很懒,什么都没留下…
展开
-
PAT甲级解题报告汇总
PAT甲级解题报告汇总(更新中……)最近在刷PAT甲级题目,AC的题目都发了博文做记录。下面对博文进行一下汇总整理,方便查阅。下面所有题目的解题报告都是本人自己所作,每篇博文都有题目大意的解读,解题思路和完全正确的解题代码。原创 2017-08-02 11:19:37 · 2013 阅读 · 0 评论 -
1007. Maximum Subsequence Sum (25)
题目链接:https://www.patest.cn/contests/pat-a-practise/1007题目大意:求一个数列的最大子列和,并输出该子列的起点和终点元素解题思路:最大和maxsum和临时和curSum初始化为0。临时和变大时更新maxsum,临时和小于0的时候,将其更新为0。end的更新比较好理解,end在cursum>maxsum的条件下随着i一直递增start的更新稍微原创 2017-08-05 14:25:22 · 365 阅读 · 0 评论 -
1012. The Best Rank (25)
题目链接:https://www.patest.cn/contests/pat-a-practise/1012题目大意:每个人的成绩分别按三门课的成绩和平均成绩排名,输出要查找的学生的最好排名和该排名对于的科目。解题思路:用0,1,2,3分别表示A,C,M,E用三门课的总分表示平均分(就不要考虑四舍五入的问题了)在学生结构体中定义rank[4]分量,表示该学生的A,C,M,E的排名先计算每个原创 2017-08-05 13:38:45 · 375 阅读 · 0 评论 -
1014. Waiting in Line (30)
题目链接:https://www.patest.cn/contests/pat-a-practise/1014题目大意:银行有N个窗口,每个窗口前的黄线内最多排队M个人,有K个人要去办理业务,每个人要办理的时间已知。排队的规则跟现实生活中的排队类似,黄线内没有位置的时候,在线外候着;黄线内有位置的时候,选择队列最短的去排队,若有两个队长度相同,则选择队列序号小的排入。最后计算每个人办理完结束的时间。原创 2017-08-05 13:21:28 · 323 阅读 · 0 评论 -
1042. Shuffling Machine (20)
题目链接:https://www.patest.cn/contests/pat-a-practise/1042题目思路: 一组字符串(扑克牌)为:S1, S2, …, S13, H1, H2, …, H13, C1, C2, …, C13, D1, D2, …, D13, J1, J2。按照输入的数字来进行交换位置。输入的数字为1-54的乱序,将其存入index[]数组。交换规则是:将第i个位置的原创 2017-07-28 09:39:52 · 334 阅读 · 0 评论 -
1053. Path of Equal Weight (30)
题目链接:https://www.patest.cn/contests/pat-a-practise/1053题目大意:给定一个权值和sum,在所有从树的根节点到叶子结点的路径中,选出路径的权值和等于sum的所有路径。思路:深度优先遍历所有路径,找出满足条件的路径。注意DFS函数的结束条件代码如下(有详细注释)#include <iostream>原创 2017-07-27 11:08:11 · 304 阅读 · 0 评论 -
1040. Longest Symmetric String (25)
题目链接:https://www.patest.cn/contests/pat-a-practise/1040题目大意:求一个字符串的最大回文子串的长度解题思路:定义一个判断回文字符串的函数遍历所有子串,找到最长的回文子串代码如下:#include <iostream>#include <cstring>using namespace std;bool isSymmetric(strin原创 2017-08-10 21:46:26 · 330 阅读 · 0 评论 -
1039. Course List for Student (25)
题目链接:https://www.patest.cn/contests/pat-a-practise/1039题目大意:给出每门课选课的学生,查询每个学生所选的所有课解题思路:学生的学号使用数字来存储,便于处理代码如下:#include <algorithm>#include <vector>#include <cstdio>using namespace std;int getstno原创 2017-08-10 21:45:47 · 337 阅读 · 0 评论 -
1038. Recover the Smallest Number (30)
题目链接:https://www.patest.cn/contests/pat-a-practise/1038题目大意:给出若干个数字,可以将这些数字随意排序,使得最后拼接处的数字最小。解题思路:最开始是想通过string字符串表示数字,将所有字符串升序排序,但是结果是不行的。比如32和321,直接排序的话得到32321,但是32321明显小于32132。所以这样排序不正确。对于两个字符串a和b原创 2017-08-10 21:45:12 · 325 阅读 · 0 评论 -
1037. Magic Coupon (25)
题目链接:https://www.patest.cn/contests/pat-a-practise/1037题目大意:给两个数列A和B,A、B中格挑一个元素相乘,一直重复此动作,每个元素只能用一次,把每次的乘积累加,计算所能达到的最大和。解题思路:先将两个数列排序分别计算所有的负数*负数和正数*正数累加起来代码如下:#include <iostream>#include <algorit原创 2017-08-10 21:44:34 · 333 阅读 · 0 评论 -
1035. Password (20)
题目链接:https://www.patest.cn/contests/pat-a-practise/1035题目大意:如果密码中含有1、0、l、O,将其分别替换为@、%、L、o。代码如下:#include <iostream>#include <cstdio>#include <cstring>using namespace std;int main(int argc, char cons原创 2017-08-03 08:56:09 · 453 阅读 · 0 评论 -
1016. Phone Bills (25)
题目连接:https://www.patest.cn/contests/pat-a-practise/1016题目大意:给出一系列的电话记录,这些记录每个通话接通的时刻和挂断的时刻。从中找出完整的通话记录(同时含接通时刻和挂断时刻),然后输出,输出按照姓名排序,同一个人的按照时间先后排序解题思路:思路不难,但比较繁琐。将所有记录按照姓名排序,姓名相同的按照时间排序。然后从记录中挑出符合条件的记录对。原创 2017-08-05 19:23:51 · 337 阅读 · 0 评论 -
1017. Queueing at Bank (25)
题目链接:https://www.patest.cn/contests/pat-a-practise/1017题目大意:类比操作系统里的先来先服务解题思路:要模拟先来先服务,那么先对所有的人按照到来的先后顺序排序对排序后的所有人逐个选择窗口,计算需要等待的时间对于每个人,选择空出来最早的那个窗口接受服务,然后更新该窗口下次空闲出来的时间和该人的等待时间。 到的时候,最早要空出来的那个窗口都还没原创 2017-08-06 21:54:45 · 499 阅读 · 0 评论 -
1031. Hello World for U (20)
题目链接:https://www.patest.cn/contests/pat-a-practise/1031题目大意:将所给字符串按u字形输出,注意长和宽解题思路:先求n1,n2,n3,然后将所给字符串的每个字符按要求格式存入二维数组,最后输出即可代码如下:#include<iostream>#include<cstring>using namespace std;int main(){原创 2017-09-13 17:50:20 · 505 阅读 · 0 评论 -
1027. Colors in Mars (20)
题目链接:https://www.patest.cn/contests/pat-a-practise/1027解题思路:该题考察进制转换,比较简单代码如下:#include<iostream>#include<cstring>using namespace std;char numtochar(int x){ if(x<=9) return x+'0'; els原创 2017-09-13 17:49:42 · 407 阅读 · 0 评论 -
1026. Table Tennis (30)
题目链接:https://www.patest.cn/contests/pat-a-practise/1026解题思路:这道题坑很多,万恶的vip!!!写了好久还是有测试点不通过。下面的AC代码是参考的网上大神的版本代码如下:#include <cstdio>#include <vector>#include <algorithm>#include <cmath>using namespac原创 2017-09-13 17:48:56 · 510 阅读 · 0 评论 -
1022. Digital Library (30)
题目链接:https://www.patest.cn/contests/pat-a-practise/1022题目大意:由所给信息查询馆藏图书解题思路:1.图书的所有信息都用string表示 2.关键字字段用string类型的vector表示,所有在关键字输入的时候要进行分割 3.注意处理cin与getline同时使用是带来的冲突代码如下:#include <iostream>#include原创 2017-09-13 17:48:10 · 395 阅读 · 0 评论 -
1011. World Cup Betting (20)
题目链接:https://www.patest.cn/contests/pat-a-practise/1011代码如下:#include<iostream>#include<cstdio>#include<algorithm>using namespace std;char wtl[3]={'W','T','L'};int no[3]={0,1,2};double temp[3];do原创 2017-09-05 09:05:51 · 437 阅读 · 0 评论 -
1010. Radix (25)
题目链接:https://www.patest.cn/contests/pat-a-practise/1010题目大意:给出两个数a,b,和其中一个数的进制,判断另一个数能否在某进制下与其相等。解题思路: 要注意的点: 1.数值使用long long类型,不然会溢出 2.使用二分法查找,不然会超时代码如下:#include<cstring>#include<algorithm>#inclu原创 2017-09-05 09:05:14 · 402 阅读 · 0 评论 -
PAT甲级 1006. Sign In and Sign Out (25)
题目链接:https://www.patest.cn/contests/pat-a-practise/1006题目大意:给出每个人来的时间和走的时间,找出其中来到最早的人和走的最晚的人代码如下:#include <iostream>#include <cstring>#include <string>using namespace std;int main(){ string mins原创 2017-09-05 08:56:24 · 395 阅读 · 0 评论 -
1020. Tree Traversals (25)
题目链接:https://www.patest.cn/contests/pat-a-practise/1020题目大意:已知树的后序遍历和中序遍历,求该树的层次遍历解题思路:先根据后序和中序确定树的结构再进行层次遍历即可代码如下:#include<iostream>#include<vector>#include<queue>using namespace std;struct Nod原创 2017-08-07 09:08:31 · 333 阅读 · 0 评论 -
1018. Public Bike Management (30)
题目链接:https://www.patest.cn/contests/pat-a-practise/1018题目大意:先求最短路径,若有多条最短路径,优先选择需要从源点运出自行车最少的那条,若还相同的话,选择需要收回到源点的自行车最少的那条,题目保证结果唯一。解题思路:Dijkstra算法求最短路径,并保存下来DFS遍历所有的最短路径,求出这些路径中send、back最小的那个。#inclu原创 2017-08-07 08:57:17 · 321 阅读 · 0 评论 -
1021. Deepest Root (25)
题目链接:https://www.patest.cn/contests/pat-a-practise/1021题目大意:找出树中能使树的深度达到最大的根。解题思路:定义深度优先DFS(int v,int high),该函数用来找离v点最远点的集合先任取一点v,进行dfs找到离v点最远的一部分点即为集合set1,这些点是最终要求的点的子集。从set1中任选一点,在进行一次DFS,得到set2。原创 2017-08-07 08:58:25 · 336 阅读 · 0 评论 -
1032. Sharing (25)
题目链接:https://www.patest.cn/contests/pat-a-practise/1032题目大意:找出两个链表相汇处的结点解题思路:先遍历第一个链表,将其中所有节点标记为已访问再遍历第二个链表,在遍历过程中找到的第一个已访问的结点即为所求注意:想要通过判断next域中出现两次的结点是不可行的,因为测试用例中有些输入重复出现了多次来防止这种”小聪明”的方法代码如下:#in原创 2017-08-03 08:54:05 · 437 阅读 · 0 评论 -
1013. Battle Over Cities (25)
题目链接:https://www.patest.cn/contests/pat-a-practise/1013题目大意:给出一个图,然后给出一部分待检测的结点序号,判断将这些结点删除之后,对剩下的图要添加几条边才能成为连通图。解题思路:要判断一个图要添加几条边才能成为连通图,只需要统计该图有几个连通分量。n个连通分量需要n-1条边求图的连通分量,可以使用图遍历的方法。从一个结点开始深度优先地遍历原创 2017-08-03 08:46:05 · 327 阅读 · 0 评论 -
1054. The Dominant Color (20)
题目大意:给m*n个数字,会有重复数字,找出其中个数超过半数的数字。使用map的方法:键为数字,值为个数。#include <iostream>原创 2017-07-25 09:39:08 · 302 阅读 · 0 评论 -
1023. Have Fun with Numbers (20)
题目链接:https://www.patest.cn/contests/pat-a-practise/1023题目大意:判断a和2*a中每一个数字的个数是否相同。解题思路:为便于统计数字的个数使用字符串保存数字a,然后计算2*a再统计两者中0,1,···9的个数比较两者中每个数字的个数是否相同代码如下:#include <iostream>#include <string>using n原创 2017-08-01 20:20:58 · 341 阅读 · 0 评论 -
1019. General Palindromic Number (20)
题目链接:https://www.patest.cn/contests/pat-a-practise/1019题目大意:给定正整数N和b,判断N的b进制数是不是回文数解题思路:函数Ninb(int n,int b),返回值为n的b进制数的逆置,判断此值就可以判断n的b进制数是否是回文数函数isPalindromic(vector num),用来判断num是否是回文数代码如下:#include原创 2017-08-01 20:20:11 · 335 阅读 · 0 评论 -
1051. Pop Sequence (25)
入栈的顺序为1,2,3…,N;判断给定的出栈序列是否为合理的出栈序列。解题思路: 模拟出栈入栈的方法。扫描待判定序列,栈顶不等于当前扫描元素且栈不溢出时执行入栈操作;栈顶等于扫描元素时执行出栈操作。最终判断序列中的元素是否全被扫描,若是则证明是合理的出栈序列。代码如下:#include <ios原创 2017-07-23 22:00:55 · 309 阅读 · 0 评论 -
1015. Reversible Primes (20)
题目链接:https://www.patest.cn/contests/pat-a-practise/1015题目大意:如果一个人正整数N是素数,并且N的radix进制数的逆置所表示的10进制数仍是素数,那么N为reversible prime。给定若该N和radix,判断N是否是reversible prime。解题思路:isPrime(int x),用来判断x是否是素数raverse(n,r原创 2017-07-31 18:24:43 · 328 阅读 · 0 评论 -
1009. Product of Polynomials (25)
题目链接:https://www.patest.cn/contests/pat-a-practise/1009题目大意:两个多项式A和B求,A*B解题思路:与1002. A+B for Polynomials (25)思路相同,通过模拟多项式的乘法,很容易求得。代码如下:#include <iostream>#include <cstdio>using namespace std;int ma原创 2017-07-31 18:23:41 · 326 阅读 · 0 评论 -
1004. Counting Leaves (30)
题目链接:https://www.patest.cn/contests/pat-a-practise/1004题目大意:求一课树中每一层叶子结点的个数。解题思路:二维数组tree[][]来存储树,tree[i][j]表示序号为i的结点的第j个孩子的序号。level[i]:表示序号为i的结点在level[i]层count[i]:表示第i层的叶子结点的数量使用层次遍历,遍历每一层。计算每层的叶子原创 2017-07-31 18:21:59 · 335 阅读 · 0 评论 -
1086. Tree Traversals Again (25)
题目链接:https://www.patest.cn/contests/pat-a-practise/1086解题思路: 本题其实就是根据树的前序遍历序列和中序序列求后序序列。所给的输入是入栈出栈序列,此序列中,所有的入栈元素顺序构成的序列为树的前序遍历序列;所有的出栈元素顺序构成的序列为中序遍历序列。 代码中函数postorder(int rootidx,int start原创 2017-07-18 09:24:03 · 1019 阅读 · 0 评论 -
1030.Travel Plan (30)
题目链接:https://www.patest.cn/contests/pat-a-practise/1030题目大意:给一个图,对于每条边给出边的长度(城市距离)和边的权重(旅行花销)。然后给出起点和终点,求出两点之间的最短路径,若有重复则取边的总权值(总花销)最小的那条。解题思路: 本题目与另一道PAT 1003思路相同,都是使用Dijkstra最短路径算法。区别是:要将路径输出。在求最短路原创 2017-07-30 20:48:23 · 392 阅读 · 0 评论 -
1003. Emergency (25)
题目链接:https://www.patest.cn/contests/pat-a-practise/1003题目大意: 给一个图,求所给两点之间的最短路径的条数,以及这些最短路径中,哪条路径经过的所有节点的权值和最大。原创 2017-07-30 16:08:25 · 442 阅读 · 0 评论 -
1002. A+B for Polynomials (25)
题目链接:https://www.patest.cn/contests/pat-a-practise/1003解题思路: 给两个多项式A和B,分别给出A和B的非零项指数和系数。求A+B,结果按指数递减方式输出指数和系数。该题目可以使用常用的hash的方式,用数组p[10001]表示多项式,下标为指数,元素值为指数对应的系数,原创 2017-07-30 09:41:31 · 485 阅读 · 0 评论 -
1024. Palindromic Number (25)
题目链接:https://www.patest.cn/contests/pat-a-practise/1024题目大意:判断a是否是回文数,若不是则计算a+(a的逆置)是否是回文数,如此迭代。若迭代k轮之后仍不是回文数,输出第k轮的a+(a的逆置)解题思路:注意溢出的问题,long long也是会溢出的,会有两个测试点不通过,所以要用字符串存储数字字符串可以使用函数reverse()来进行逆置原创 2017-08-01 20:21:55 · 728 阅读 · 0 评论 -
1050. String Subtraction (20)
题目连接:https://www.patest.cn/contests/pat-a-practise/1050题目大意:给定两个字符串S1,S2,从S1中删除S2中出现的所有字符,并输出剩余字符。小tips: 1.注意字符串含空格 2.双层for循环的方法会超时原创 2017-07-24 16:01:16 · 290 阅读 · 0 评论 -
1048. Find Coins (25)
题目链接:https://www.patest.cn/contests/pat-a-practise/1048题目大意:给出一个数列和一个值m,找出数列中的两个数v1,v2使得v1+v2=m。并且v1<=v2,若不唯一,输出v1最小的那个解题思路:先将数列排序定义i,j,从数列的左侧和右侧开始扫描,并计算临时和和较大j前移,和较小i后移,知道找到合适的i,j代码如下:#include <io原创 2017-08-09 10:47:28 · 275 阅读 · 0 评论 -
1071. Speech Patterns (25)
题目链接:https://www.patest.cn/contests/pat-a-practise/1071题目大意:给出一个字符串,以回车结束。找出字符串中的非字母和数字字符,然后将整个字符串在这些非字母数字字符出切割,得到若干个由字母数字组成的单词,找出数量最多的单词解题思路:map的使用isalnum()和tolower()的使用代码如下:#include <iostream>#in原创 2017-08-09 10:48:12 · 325 阅读 · 0 评论