
PAT 甲级
java实现
LangWeiXian_
这个作者很懒,什么都没留下…
展开
-
1017 Queueing at Bank (25 分) JAVA
题意 && 解题思路 && 坑:和1014有点像,不过只有一个人在黄线内等。动态规划问题。所有人processing时间不能超过1小时,也就是他一旦服务了一小时,不再继续回到队列最后排队,而是直接离开(是我想复杂了=.=)所有的时间转化成秒来计算。对于等待时间的计算,分两种情况:(1)顾客到达的时候所有窗口都在服务,必须等,直到一个窗口空闲。窗口服务完后更新当前currentTime += 顾客.processingTime即可。(2)顾客到达的.原创 2021-03-12 11:35:07 · 252 阅读 · 2 评论 -
1016 Phone Bills (25 分) JAVA
题意:(1)排序题,但是细节很复杂。对于ID,按照字母表排序;而每个ID中的所有通话,按照日期从小到大排。(2)用TreeMap来存储<String,ArrayList<Record>>来存储,一个ID对应一个列表,列表里存储ID的所有通话记录并排好序。而TreeMap里面可以自己写一个Comparator按ID排序(3)同一个ID的排序完毕的列表里,相邻的on-line和off-line记为一次通话记录。(4)对于每次通话,封装成一个Record对象,除了存储i..原创 2021-03-10 21:25:36 · 270 阅读 · 0 评论 -
1015 Reversible Primes (20 分) Java
题意 && 解题思路:看上去是个送分题,但是也卡了一会儿,主要是没看懂题=。=。。。。。。如果输入23 2,23的2进制-->10111,10111倒过来是11101,11101转为10进制-->29,23和29都是质数,就返回true,否则false。import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner input .原创 2021-03-10 15:57:40 · 157 阅读 · 0 评论 -
1014 Waiting in Line (30 分) Java
题意 && 解题思路:这道题脑子里要有一个动画。假如是两个窗口,每个窗口最多站两个人。排队的人按照两个规则站队:(1)两个队伍一样长,选窗口编号小的站(2)两个队伍长度不一样,选人少的站,一旦站队,就不再换队了。动态规划问题。按照题目给的数据,我们可以模拟一下排队的情况。1) 假设还没到8点,但是顾客已经来齐了,已经站好队。----------------window[0]: 1 3window[1]: 2 4----------------2...原创 2021-03-10 12:37:16 · 426 阅读 · 0 评论 -
1013 Battle Over Cities (25 分) java
题意:图问题,意思是在一个无向图中,以城市为顶点,城市之间有高速公路连接着,战争爆发,如果一个城市被敌人占领了,其他城市之间需要用高速公路运送物资,至少要修几条公路。解题思路:城市被占领后,本来连通(不一定)着的城市可能变得不再连通了,转化为求连通子图个数问题,即:这些城市之间形成了多少个连通子图(subConnectBranch:int),要把这些连通子图重新连接起来,至少要修subConnectBranch-1条公路。考虑到可能是个稀疏矩阵,于是采用邻接表建图。遍历领接表,每次遍历之..原创 2021-03-08 16:30:43 · 277 阅读 · 0 评论 -
1012 The Best Rank (25 分) java
题意:抓住一点,按照A—>C—>M—>E的顺序取每门成绩的最高排名,因为每个学生的成绩是鼓励式的,所以允许有并列。如果只有A,B两个学生,且A和B的Average都是90,但是A的C语言成绩比B的C语言成绩高,但B仍然输出 1 A。解题思路:用4个ArrayList<Student>存储学生排名,分别按照A,C,M,E升序排列。同时用一个Map来存储<Student.id, Student.rank[]>键值对,在代码里面对应<Strin...原创 2021-03-08 11:37:10 · 397 阅读 · 1 评论 -
1011 World Cup Betting (20 分) java
题意:题目意思不难理解,不过要注意一下赢,输,平的赔率是不可能相等的。这样还顺便不用考虑其他的情况。import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); double triple[][] = new double[3][3]; double odd = 1; for(int i.原创 2021-03-08 08:32:35 · 162 阅读 · 0 评论 -
1010 Radix (25 分) java
题意 && 解题思路:这题题目意思就看了老半天。。。。。。为什么一定要先确认一下N1或者N2的radix?一直傻瓜从2遍历到35不就行了。后来发现=.=原来是我连题目都没看懂,开始就得了6分。一直提交,一直6分。。。。。。想想,N1和N2是不是可以无限大。而且进制很有可能不止到35结束。虽然每一位的数字最大只到z,但是进制不一定啊,比如,这样的zyx是完全有可能以36为进制吧。这道题最关键的是要注意到:不管N1和N2的初始进制是多少,他们最后如果在某个进制上相等了,那他们一.原创 2021-03-07 22:17:10 · 301 阅读 · 0 评论 -
1009 Product of Polynomials (25 分) Java
解题思路:这题和1002有点像,但是不是+,而是乘。也考虑用map来存储。exp(指数)和coe(系数)刚好组成<Integer, Double>的键值对,指数Key是不能重复的,刚好符合多项式指数的特性,更新还方便。只是最后用TreeMap来存储结果,需要在初始化TreeMap的时候倒序排序,可以用Comparator.reverseOrder()。import java.util.Scanner;import java.util.Map;import java.util.H.原创 2021-03-07 21:35:57 · 191 阅读 · 1 评论 -
1008 Elevator (20 分)java
解题思路:送分题。import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); int n = input.nextInt(); int time = n*5; int lastFloor = 0; for(int i=0; i<n; i++) { int floor .原创 2021-03-07 21:31:49 · 155 阅读 · 0 评论 -
1007 Maximum Subsequence Sum (25 分) java
解题思路:最大子列和问题,题目不需要得到所有等长的子列和,相等的取前面的即可,简化了题目。最大子列和的最好时间复杂度是O(N),所以应该尽量想着一遍遍历求出答案,题目要求输出最大子列和,子列和final_sum,开始&&结束,对应的值,想到这比较符合数组的存储结构,遍历下标,start对应一个,end对应一个,再用start和end访问数组就得到结果了。除此之外还需要两个中间变量,一个是遍历过程中的sub_sum,一个index用来更新start的值,当遍历数组过程中sub_s.原创 2021-03-07 21:30:06 · 187 阅读 · 1 评论 -
1006 Sign In and Sign Out (25 分) java
解题思路:题意也好理解,我的思路是将每个id的到达时间和离开时间统一转化成秒,再分别用两个map存储一下,同时更新最早到达时间和最迟离开时间,因为题目保证了两个时间都是唯一的,而map刚刚好没有重复的key。数据处理用split函数已经喜闻乐见了。import java.util.Scanner;import java.util.HashMap;import java.util.Map;public class Main { public static void main(String.原创 2021-03-07 21:09:17 · 208 阅读 · 0 评论 -
1005 Spell It Right (20 分) java
思路:题意好理解,就是数字长度不限定,不过Java里面有BigInteger,试一下里面的几个函数这题也就好处理了。import java.util.Scanner;import java.math.BigInteger;public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in);// BigInteger num = new BigInt.原创 2021-03-07 21:04:36 · 176 阅读 · 0 评论 -
1004 Counting Leaves(30) java
题意:题目意思是建立一颗树(非二叉树),然后统计树上的非叶子结点,区别一下树的遍历与二叉树的遍历(前者似乎只有dfs和bfs,除了bfs,和二叉树的先序后序中序还是有点不一样的=。=),最开始做的时候测试点2,4不通过,最开始用左孩子右兄弟法转换成二叉树来做的,不仅及其繁琐,还没ac。这道题有两个测试点应该是这样的情况,比如:7 301 2 02 0302 3 04 05 0605 1 07与7 301 2 02 0305 1 0702 3 04 05 06要能.原创 2021-03-06 19:23:37 · 239 阅读 · 0 评论 -
1003 Emergency (25 分) java
题意:用Dijkstra来做,题目在Dijkstra的基础上增加了一些操作,除了要更新dist[] 和 visit[] 数组外,将原算法中记录路径的parent[]数组改为--->记录start至end最短路径上的rescue[],另外还需要一个ways[]数组来更新最短路径的条数。在遇到多条最短路径时,表现为dist[j] == dist[index] + edge[index][j],此时将ways[j] += ways[index]即可。然后比较rescue[j] 与 rescue[ind.原创 2021-03-05 14:53:21 · 306 阅读 · 0 评论 -
1002 A+B for Polynomials(25) java
题意:2 1 2.4 0 3.22 2 1.5 1 0.5A 和 B 都是多项式,K代表后面有几项,而<1, 2.4>与<0, 3.2>正好对应指数和系数,即而<2, 1.5>与<1, 0.5>同理可得为而相加刚好得到,前面的3为非零项,后面紧接着为<2, 1.5>, <1, 2.9>, <0, 3.2>3 2 1.5 1 2.9 0 3.2思路:用TreeMap来解决,...原创 2021-03-03 21:36:26 · 157 阅读 · 3 评论 -
1001 A+B Format (20) java
1001 A+B Format (20 分)Calculatea+band output the sum in standard format -- that is, the digits must be separated into groups of three by commas (unless there are less than four digits).Input Specification:Each input file contains one test case. Ea...原创 2021-03-03 20:00:56 · 182 阅读 · 2 评论