PAT
zerohawk
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
PAT 乙级 1096 大美数
PAT 乙级 1096 大美数思路:求出给定n的因子,再进行排列组合求出四个数的和,然后判断是否有能整除n的数,如果有就是输出Yes,否则输出No。递归遍历即可注意这里有个整除的概念,a整除b是b%a0而不是a%b0否则测试点1过不去#include <iostream>#include <vector>#include <set>using namespace std;vector<int> fact; //存放因子和四个因子的和set&l原创 2022-05-23 15:17:32 · 510 阅读 · 0 评论 -
PAT 甲级 1066 Root of AVL Tree
1066 Root of AVL Tree模拟平衡二叉树的过程,输出最后生成的树的根节点class Node: def __init__(self,data,height=1,left=None,right=None): self.data=data self.left=left self.right=right self.height=height def getHeight(self): if self原创 2021-11-23 15:09:00 · 310 阅读 · 0 评论 -
PAT 甲级 1063 Set Similarity
1063 Set Similarity题目大意:找出两个集合里共有的元素个数除上两个集合的并集n=int(input())l=[]for i in range(n): tmp=list(map(int,input().split())) l.append(set(tmp[1:]))k=int(input())for i in range(k): pair=tuple(map(int,input().split())) common=l[pair[0]-1]&原创 2021-11-23 08:43:41 · 245 阅读 · 0 评论 -
PAT 甲级 1062 Talent and Virtue
1062 Talent and Virtue题目大意:给出一组人数,按照要求分类再排序输出。圣人是virtue和talent都超过h的人,君子是virtue超过h并且talent位于[l,h)区间内的人,笨蛋是两个都位于[l,h)区间内并且virtue>=talent的人,剩下的达到最低标准l的都是小人。PS:python日常超时,C++这里完美ACclass Person: def __init__(self,id,virtue,talent): self.id=id原创 2021-11-22 18:36:06 · 626 阅读 · 0 评论 -
PAT 甲级 1060 Are They Equal
1060 Are They Equal题目大意:给出连个数和一个精度位数,用科学计数法表示这两个数,如果相同则输出YES+科学记数法表示的数;否则输出NO+各自的科学记数法思路:找出小数点和第一个有效数字,然后比较两者顺序,记录下n个有效数字,按格式输出即可。注意这里坑点挺多,像是小数点在有效数字后面输出时候得处理掉小数点,0的输出,指数负数的输出,前导0的处理等等,还是有点麻烦的def isZero(s): #判断字符串是否全部为0 n=len(s) for i in range(原创 2021-11-22 14:35:00 · 267 阅读 · 0 评论 -
PAT 甲级 1059 Prime Factors
1059 Prime Factors题目大意:给出一个数n,找出他的所有素因子,按照格式输出即可。注意1和n自身是素数的情况from math import *def isPrime(n): if n==1: return False if n==2 or n==3: return True for i in range(2,int(sqrt(n))+1): if n%i==0: return Fals原创 2021-11-22 10:00:30 · 276 阅读 · 0 评论 -
PAT 甲级 1056 Mice and Rice
1056 Mice and Rice题目大意:给出老鼠的数量和每组的人数,将老鼠分成若干组(多下来不够每组人数的算作一组),第二行给出每只老鼠最终的重量,第三行给出分组顺序思路:记录每轮获胜的选手,淘汰掉的人的排名就是当前所在的层数,将获胜的选手继续下一轮排名。注意这里分组需要考虑总人数不满一组的情况!n,m=map(int,input().split())weight=list(map(int,input().split())) #每只老鼠的重量order=list(map(int,inpu原创 2021-11-21 13:55:33 · 524 阅读 · 0 评论 -
PAT 甲级 1052 Linked List Sorting
1052 Linked List Sorting题目大意:以(address,key,next)形式给出一个链表,将链表按key进行排序后输出新生成的链表思路:本以为直接排序就好,next给的数据都没有用,后来发现会有多的节点,即给出一个头节点会生成一个链表,但是有的节点不在这条链上,这就要去掉多余的节点。测试点3超时,C++完美AC。想了一下输入输出是不能砍的,唯一能动手脚的应该就是去除节点的步骤了,不过性价比不高,太费时间n,head=map(int,input().split())l=[]l原创 2021-11-20 17:52:21 · 444 阅读 · 0 评论 -
PAT 甲级 1051 Pop Sequence
1051 Pop Sequence题目大意:给定一个栈的大小,给出k组数据,输出是否是合法的出栈序列思路:用数组模拟栈即可,注意判断是否超出栈的大小,每轮循环都要初始化。本以为会超时,单纯的想试下直接模拟能拿多少分,意外的全部AC了…m,n,k=map(int,input().split())for i in range(k): flag=True stack=[] #模拟栈 l=list(map(int,input().split())) index=0 #待原创 2021-11-20 11:40:18 · 434 阅读 · 0 评论 -
PAT 甲级 1048 Find Coins
1048 Find Coins题目大意:给出目标价格m,要求找出两个硬币和恰好等于m。如果没有解输出No Solution;若不止一组解则输出coins[i]+coins[j]=m中i最小的解思路:首先不能暴力求解,肯定超时。先对硬币进行排序,然后用二分法来查找。注意不能直接用二分,依然会超时,先提前用set去重,因为要求的是硬币面额而不是下标。def findCoins(l,r,m): global coins if coins[l]+coins[r]==m: ret原创 2021-11-20 10:40:56 · 479 阅读 · 0 评论 -
PAT 甲级 1047 Student List for Course
1047 Student List for Course题目大意:给出学生数量和课程数量,接下来给出每个学生所选的课,统计每个课程选的学生姓名思路:用dict字典存储每门课选的人即可。注意有的课可能没有人选,要提前判断字典里是否存在n,k=map(int,input().split())course={}for i in range(n): tmp=input().split() for j in range(2,len(tmp)): if course.get(t原创 2021-11-19 19:32:44 · 286 阅读 · 0 评论 -
PAT 甲级 1043 Is It a Binary Search Tree
1043 Is It a Binary Search Tree题目大意:给出一棵树的先序序列,判断它是否是一个BST或者一个镜面BST思路:这题主要是树的遍历问题,先假设该树是一棵BST,按照BST的方法建树,然后输出建好树后的先序序列,若是与原数列从小到大排列相同则说明是BST;如果不相同则按照相反的方式遍历这棵树,若得到的先序序列与原数列从大到小排列则说明是镜面BST;否则输出NO。C++完美AC,python测试点5一直非零返回,也不准备找了,花的时间太长了。顺便提一嘴python没有引用真的挺不原创 2021-11-17 22:00:25 · 908 阅读 · 2 评论 -
PAT 甲级 1040 Longest Symmetric String
1040 Longest Symmetric String题目大意:给出一个字符串,求出最长的回文子串的长度思路:从第一个字符开始往后遍历,每次遍历第一个字符不动,从下一个字符开始找起,若是有回文子串则更新最大长度,暴力求解即可。注意这样会有个测试点超时,其中加个判断当前子串长度是否大于已经找到的最长长度,大的话则继续查找,否则直接跳到下一轮就能避免超时def isSymmetric(s): start,end=0,len(s)-1 while start<=end:原创 2021-11-16 15:12:17 · 422 阅读 · 0 评论 -
PAT 甲级 1039 Course List for Student
1039 Course List for Student题目大意:给出待查询人数和学生的选课情况,按查询顺序输出每个学生的选课情况简单的模拟,键值对dict即可。一开始最后一个测试点超时,原因是for…in语句的使用之后还是要判断下标,改成下标索引就能过了,但是测试点1的非零返回还是没找到原因,可能是pat后台对python检测有点问题吧,相同的做法C++完美ACn,k=map(int,input().split())select_courses={}for i in range(k):原创 2021-11-16 13:23:52 · 461 阅读 · 0 评论 -
pat 甲级 1037 Magic Coupon
1037 Magic Coupon题目大意:给出两行整数(包括负数和0),两两乘积求和,问和的最大值思路:贪心算法,先将非负数按从大到小排序,再将负数从小到大排序,一次对应乘积加起来即可,注意0要跳过。测试点4没过n=int(input())coupon=list(map(int,input().split()))m=int(input())product=list(map(int,input().split()))coupon.sort(key=lambda x:-x if x>=0原创 2021-11-15 15:29:05 · 476 阅读 · 0 评论 -
PAT 甲级 1036 Boys vs Girls
1036 Boys vs Girls题目大意:给出男生女生的分数,第一行输出女生的最高分,没有则输出absent;第二行输出男生的最低分,没有则输出absent;最后一行输出两者分差,不存在则输出NAn=int(input())male=[]female=[]absent=Falsefor i in range(n): tmp=input().split() name=tmp[0] gender=tmp[1] id=tmp[2] grade=int(tmp原创 2021-11-15 14:21:04 · 267 阅读 · 0 评论 -
PAT 甲级 1033 To Fill or Not to Fill
1033 To Fill or Not to Fill题目大意:从起始点到终止点中间有若干加油站,给出汽车的油箱容量,总距离,每单位的油能跑的路程,和n组数据,求出路径上所花的最少费用,如不能到达终点则输出最远能到达的路程。思路:一个贪心模拟,有点费脑,把所有的加油站按路程远近进行排序,路程相同的将费用少的放在前面,之后统计当前油箱里的油,所花的费用,以及以该加油站为起点所能到达的最便宜加油站。注意这里0位置处必须有一个加油站(测试点2),测试点4报错非零返回,暂时先跳过了capacity,dista原创 2021-11-15 12:14:01 · 197 阅读 · 0 评论 -
PAT甲级 1032 Sharing
1032 Sharing题目大意:给出两个字符串,找出公共的后缀思路:简单的求公共子串问题。一开始想用从后面往前找遇到分支处则说明找到,但是有两个测试点超时。后来改进成对一个子串遍历全部标记一下,第二个子串遍历的时候若碰到已经访问过的则说明找到。这里有一个坑点就是该不该判断-1的个数,由于题目明确说明是两个子串所以我觉得这里是要判断的,可是会有一个测试点2不通过,省去这步反而可以过…再有就是最后一个测试点会超时,针对python来说目前没有啥好方法,C++倒是完美通过MAXN=100005next=原创 2021-11-13 23:55:10 · 1099 阅读 · 0 评论 -
PAT甲级 1029 Median
1029 Median题目大意:给出两个列表,先将它们合并,然后从小到大排序,输出中位数思路:简单的模拟。注意列表长度为偶数时输出的是n/2-1位置处的点,还有我并不知道这题可不可以重复,反正我是去重后AC的。l1=list(map(int,input().split()))l2=list(map(int,input().split()))n1,n2=l1[0],l2[0]n=n1+n2l1,l2=l1[1:],l2[1:]l1.extend(l2)l1=list(set(l1))l1.原创 2021-11-13 11:33:35 · 783 阅读 · 0 评论 -
PAT甲级 1028 List Sorting
1028 List Sorting题目大意:给出一组学生数据,由学号,姓名,分数组成,根据输入的标识符c进行相应的排序思路:简单模拟。不过我第一次提交最后一个测试点超时,第二次又通过了,应该是耗时边界吧,398msdef cmp(t,i): return (t[i-1],t[0])n,c=map(int,input().split())l=[]for i in range(n): tmp=input().split() tmp[2]=int(tmp[2]) l.原创 2021-11-13 11:03:04 · 411 阅读 · 0 评论 -
PAT甲级 1025 PAT Ranking
1025 PAT Ranking题目大意:给出几个考场学生的学号和分数(学号不重复),要求按照总排名情况输出学生的总排名,学号,考场,考场排名。思路:录入数据后只需对分数进行全局和局部排序即可,相同分数排名相同,学号按字典序从小到大输出。注意最后一个测试点不要去遍历数组查局部排名,提前定义一个字典用来存储局部排名(因为学号无重复),不然会超时def addRankList(l): l[0].append(1) pre=l[0] same=1 for k in l[1:]原创 2021-11-12 14:29:49 · 415 阅读 · 0 评论 -
PAT甲级 1024 Palindromic Number
1024 Palindromic Number题目大意:回文子串模拟def isPalindromic(a): start=0 end=len(a)-1 while start<=end: if a[start]!=a[end]: return False start+=1 end-=1 return Truedef add(a,b): carry=0 i=len(a)-1原创 2021-11-12 10:50:42 · 224 阅读 · 0 评论 -
PAT甲级 1021 Deepest Root
1021 Deepest Root题目大意:给出一个图,判断是否是一棵树,如果不是则输出连通分量个数,如果是则输出使得树最高的那个根节点。思路:一开始我想的是先判断连通块然后再dfs求出每个节点的树高,把树高最长的节点记录下来,但是好几个超时;后来想着先求出从1开始遍历(这里别的点应该也行)离它最远的点记录下来(保存到集合中),再求出从这个集合里面第一个元素(别的也可以)dfs的结果,将距离最长的点保存下来,然后两个集合求并集就是答案。这里可以用反证法,第一个集合里的元素求dfs最大深度时必然会经过1(原创 2021-11-12 10:27:36 · 981 阅读 · 0 评论 -
PAT甲级1020 Tree Traversals
1020 Tree Traversals题目大意:通过二叉树后序遍历和中序遍历确定一棵树,然后输出它的层序遍历class Node: def __init__(self,data,left=None,right=None): self.data=data self.left=left self.right=rightdef makeRoot(postOrder,inOrder): #通过中序遍历和后序遍历确定一棵树 if len(原创 2021-11-10 14:30:45 · 277 阅读 · 0 评论 -
PAT甲级1017 Queueing at Bank
1017 Queueing at Bank题目大意:给出一组客户数据和银行窗口个数,来的早了需要等到8点银行开门,17点以后来的无效,窗口满了需要等上一个客户办理完,求出平均等待时间注意:来的早的人等待时间也要算!这里思路是按照时间从早到晚排序,先剔除17点以后的人,然后用一个end数组储存每个人结束的时间,按从大到小排,当end长度等于窗口数量时,下一个来的人就要判断是否已经有人离开,把所有离开的人全部剔除end数组,如果没有就计算来的人的等待时间C++代码已AC,这里用的是pythondef c原创 2021-11-10 11:02:37 · 813 阅读 · 0 评论 -
PAT甲级1016 Phone Bills
1016 Phone Bills题目大意:第一行给出每个时间段每分钟打电话的费用(美分,最后需要输出美元),接下来给出n组数据分别列出通话的人,时间,是打还是挂注意:不是所有记录都合法,打和挂数量不对应一定有错的。这里我是先按照人名,后按照时间顺序从小到大排列,若是碰到重复的打电话则取最后一次打的时间;若是碰到重复的挂电话则取第一次挂电话的时间由于我之前用cppAC了一次于是这次用的是python,写的比较乱:def calTimeBill(start,end): #计算时间和费用 glo原创 2021-11-09 15:22:37 · 368 阅读 · 0 评论 -
PAT甲级1154
PAT甲级1154题目大意:给出n个顶点,m条边。接下来给出k组数据,问每组数据是否能构成彩色图,要求任意两个相连的顶点颜色不能相同。如果不能输出No,否则输出一共多少种颜色。这里后两个测试点超时,一开始以为是set问题,后来发现这题用邻接表数据依然会很大,改成储存边即可。尽量不要额外开辟一个visit判断多少种颜色,数据int范围会越界。#include <iostream>#include <vector>#include <set>#include &l原创 2021-03-17 23:32:13 · 160 阅读 · 0 评论 -
PAT甲级1153
PAT甲级1153题目大意:给出每个考生的卡号以及成绩,按照一定规则查询。规则如下:如果输入的查询代码是1则输出之后要查询的等级中的考生且按照分数从大到小排列,如果相同则按照卡号字母序从小到大排列;如果输入的查询代码是2则输出这个地点所有考生的总和(不论什么等级);如果输入的查询代码是3则输出该日期内每个地区的考生人数。注意要用unordered_map还有cout全部用printf代替否则后面两个测试点会超时。#include <iostream>#include <vector原创 2021-03-17 22:45:00 · 230 阅读 · 0 评论 -
PAT甲级1150
PAT甲级1150题目大意:给出一个图以及几组路径判断这些路径是哪一类路径,并且最后一行输出最短路径以及是第几组路径。路径种类:1、构成一个环且所有节点(除开始结尾的节点)只访问一次:TS simple cycle;2、构成环但是除首尾节点访问超过1次或者首尾节点访问超过2次:TS cycle;3、未能构成一个环或者虽构成环但是不是图中每个节点都访问到:Not a TS cycle。本以为是个图论的最短路径啥的,结果只是个简单模拟分类。首先首尾节点必须相同否则一定是第三类(未构成环);如果碰到路径途中有原创 2021-03-17 17:05:26 · 116 阅读 · 0 评论 -
PAT甲级1149
PAT甲级1149题目大意:给出n组不相容的数据,接下来给出m条待查数据,问每组数据是否可以共存。由于数据比较大所以用邻接表存储不相容的节点,如果碰到某个节点其不相容节点0个则直接跳过(说明该节点一定可以放进箱子里),否则从他的不相容邻接点查找看是否有和后面待查数据相同的,如果有则记录flag为false,之后只录入数据不做任何处理(只要有一组不相容别的都不用看了)。虽然数据有些大但是可以通过一些条件跳过大量冗余循环。#include <iostream>#include <vec原创 2021-03-17 16:06:21 · 138 阅读 · 0 评论 -
PAT甲级1146
PAT甲级1146题目大意:给出一个有向图,然后给出k组数据,判断是否能构成拓扑序。开辟indegree数组保存每个节点的入度,判断时候额外复制一个数组处理,不要在原数组上修改。每输入一个顶点就判断其是否入度为0,如果不为0标记false,之后输入的数据不做任何处理,并且保存该组数据的编号;如果为0则将这个顶点指向的顶点入度减1.最后输出所有不能拓扑的下标。#include <iostream>#include <vector>#include <queue>原创 2021-03-17 15:56:15 · 117 阅读 · 0 评论 -
PAT甲级1145
PAT甲级1145题目大意:给出表长,插入数据n,待查数据m,其中表长如果不是素数得找到一个比它大的最小素数。用平方探测法处理冲突,若插入不了则输出X cannot be inserted.。最后输出待查数据的平均查找时间。#include <iostream>#include <vector>#include <algorithm>#include <math.h>using namespace std;bool isPrime(int x)原创 2021-03-17 15:51:19 · 115 阅读 · 0 评论 -
PAT甲级1142
PAT甲级1142题目大意:给出nv个顶点,ne条边,接下来给出m组数据,判断这些数据是否是同一个相关图(该组数据中任意两个顶点间都存在边),如果不是输出Not a Clique;如果是判断是否是极大相关图(除了这组数据剩下图中的顶点任意加进一个都不能构成相关图),若是输出Yes否则输出Not Maximal。首先需要判断是否相关,任意两个顶点组合都得有边,否则返回false,全部遍历完返回true;判断极大相关可以开辟visit数组保存该组数据已经出现过的数据,然后遍历剩下图中未访问过的顶点,判断与该原创 2021-03-17 11:30:36 · 147 阅读 · 0 评论 -
PAT甲级1141
PAT甲级1141题目大意:给出各个考生PAT的成绩,甲级1,顶级1.5,乙级/1.5,统计每个学校总共拿了多少分以及一共有多少成员参加。先输出学校总数,然后按照总分从高到低排列,总分相同按照参赛人数从小到大排列,若参赛人数也一样则按照学校字母序排列。map保存每个学校总分以及成员,遍历统计即可。注意这里统计分数要用double型,不然会损失精度测试点5不通过。#include <iostream>#include <vector>#include <string&g原创 2021-03-17 10:42:08 · 168 阅读 · 0 评论 -
PAT甲级1134
PAT甲级1134题目大意:给出n个顶点m条边,接下来给出k组待查询数据,问每组数据是否能包括每条边(只要一条边有一个顶点在该组数据里即可)。定义两个数组存放第i条边的两个端点,查询时候直接用set。若某条边两个顶点都未出现在该集合里则输出No,否则输出Yes。这里用vector判断会超时。#include <iostream>#include <vector>#include <algorithm>#include <set>#define M原创 2021-03-16 23:03:06 · 149 阅读 · 0 评论 -
PAT甲级1133
PAT甲级1133题目大意:给定一个链表以及一个数K,首先将链表中所有负数放在前面,其次从0到k之间的数(包括两个端点)接在后面,最后把大于k的数全部串在后面。所有操作保证数字的相对位置不变。开辟data数组合next数组分别存放数据和下一个节点的地址,做三次循环处理,最后输出即可。注意这里链表当中有可能有无用数据,不能按照n所给输出,要统计总共多少有效数字(倒数第二个测试点)。#include <iostream>#include <vector>#include <原创 2021-03-16 16:21:46 · 152 阅读 · 0 评论 -
PAT甲级1130
PAT甲级1130题目大意:给出n个节点存放的内容和左右孩子编号,求这棵树的中序表达式。递归中序遍历即可,在遍历左孩子前加左括号,在遍历右孩子后加右括号。额外开辟个cnt数组,只要找到从1到n中未出现的数就是根节点。这里博主一开始cnt设的21做的后两个测试点段错误,后来210倒数第二个还是段错误,2100才全过,这点还没搞明白什么鬼。#include <iostream>#include <vector>#include <string>#include &原创 2021-03-16 15:10:13 · 86 阅读 · 0 评论 -
PAT甲级1126
PAT甲级1126题目大意:给定总节点数,总边数,让你判断是否是一个Eulerian路径。Eulerian路径:一个无向连通图所有的节点的度都是偶数;semi-Eulerian路径:一个无向连通图只有两个度为奇数的节点,剩下的节点度都是偶数;non-Eulerian:超过两个节点度为奇数。统计度的问题,循环遍历每个节点累加度。之后遍历degree数组统计奇数度的个数即可。注意这里首先要判断图是否连通(测试点3)。#include <stdio.h>#include <vector&原创 2021-03-16 10:25:38 · 114 阅读 · 0 评论 -
PAT甲级1122
PAT甲级1122题目大意:给出n个节点m条边构成一个无向图,接下来给出k个待查询路径,看是否可以构成一个简单回路。要求路径中不能有重复的边,开头结尾节点必须一致,必须包含所有顶点,可以用个set存放查询的节点判断是否包含所有顶点(测试点2)。若中途发现不符合要求不能提前退出,一定要输入完所有数据。#include <stdio.h>#include <vector>#include <string>#include <queue>#includ原创 2021-03-15 23:23:56 · 166 阅读 · 0 评论 -
PAT甲级1114
PAT甲级1114题目大意:给出n组数据,每行给出当前人员的id,父母亲的id,孩子数量,孩子id,以及房产和总资产。求出一共有多少个家庭,然后每行要输出每个家庭最小成员的id,总人数,平均房产以及平均总资产;按照平均总资产降序排列,如果有相同的则按照最小成员升序排列。DFS查找连通图问题,也可以用并查集。设置孩子双亲数组保存每个人员的孩子和父母,注意这里要去重,每次输入数据的时候要双向保存。定义hash数组存放已经出现过得人员(应对单人家庭的情况)。#include <iostream>原创 2021-03-15 12:23:39 · 106 阅读 · 0 评论
分享