0


【PAT乙】2022秋季赛后总结

PAT乙110题专栏:PAT乙(JAVA题解)

✨前言

  1. 这个暑假博主利用见习和闲暇的时间刷完了PAT乙级的110道题目,首先来说说我的感受吧,题目呢不是很难涉及到的知识点呢也不多,像一些常见的HashMap,数组,自定义类,大数,排序,双指针,重写CompareTo方法都是常考点,乙级也没有涉及什么复杂的数据结构,最多也就考考链表,真题呢博主做了今年的**春季**和**夏季赛**,感觉春季难度和这次的秋季难度差不多,**夏季赛**应该算是**最难的**了,其中最后一道手撸**操作系统**中的**LRU缓存算法**,实属是把我看懵逼了,好在这次**秋季赛**难度一般,做起来感觉还是比较顺利的!

👉🏻历史回顾👈🏻

PAT乙级
PAT乙级【Java题解合集】_小羊不会飞的博客

✏️真题回忆

因为题目忘记复制和截图了,下面仅凭博主残缺的记忆以及IDEA里的题解代码,来写下述的总结,敬请谅解!!

🎈第一题

  1. package PAT2022秋季;
  2. import java.io.*;
  3. /**
  4. * @author yx
  5. * @date 2022-09-04 13:25
  6. */
  7. public class NO1 {
  8. static PrintWriter out=new PrintWriter(System.out);
  9. static BufferedReader ins=new BufferedReader(new InputStreamReader(System.in));
  10. static StreamTokenizer in=new StreamTokenizer(ins);
  11. public static void main(String[] args) throws IOException {
  12. in.nextToken();int a0=(int) in.nval;
  13. in.nextToken();int n=(int) in.nval;
  14. for (int i = 0; i < n; i++) {
  15. a0=sum_i(a0*a0*a0+1);
  16. }
  17. System.out.println(a0);
  18. }
  19. static int sum_i(int n){
  20. int sum=0;
  21. while (n!=0){
  22. sum+=n%10;
  23. n=n/10;
  24. }
  25. return sum;
  26. }
  27. }

第一题非常基础,求每个数字的各个位数上的数字之后,然后以数列的形式展现,直接一个迭代就完事儿了。

🎈第二题

  1. package PAT2022秋季;
  2. import java.io.*;
  3. import java.util.ArrayList;
  4. import java.util.HashSet;
  5. /**
  6. * @author yx
  7. * @date 2022-09-04 13:32
  8. */
  9. public class NO2 {
  10. static PrintWriter out=new PrintWriter(System.out);
  11. static BufferedReader ins=new BufferedReader(new InputStreamReader(System.in));
  12. static StreamTokenizer in=new StreamTokenizer(ins);
  13. public static void main(String[] args) throws IOException {
  14. in.nextToken();int m=(int) in.nval;
  15. in.nextToken();int k=(int) in.nval;
  16. String[] split=ins.readLine().split("");
  17. HashSet<Integer> set=new HashSet<>();
  18. int n=0;
  19. int ans=0;
  20. for (int i = 0; i < m; i++) {
  21. if(split[i].equals("A")){
  22. n=bHua_A(n);
  23. set.add(n);
  24. }else {
  25. n=bHua_B(n);
  26. set.add(n);
  27. }
  28. // System.out.println(n);
  29. }
  30. ArrayList<Integer> list=new ArrayList<>(set);
  31. for (int i = 0; i < list.size(); i++) {
  32. if(list.get(i)<=k){
  33. ans++;
  34. // System.out.print(list.get(i)+" ");
  35. }
  36. }
  37. System.out.println(ans);
  38. }
  39. static int bHua_A(int n){
  40. return n/4;
  41. }
  42. static int bHua_B(int n){
  43. return (8*n+1);
  44. }
  45. }

第二题是一个字符串+数组的题目吧,大概的意思是给你一串字符,分别由A和B组成,然后遍历,当字符串,当字符为A时对应的A操作,当字符为B时对应的B操作,最后将每次操作过后的数字存进set中,最后统计这些数字中小于k的个数!

🎈第三题

  1. package PAT2022秋季;
  2. import com.sun.deploy.util.SyncAccess;
  3. import com.sun.xml.internal.bind.v2.runtime.reflect.Lister;
  4. import java.io.*;
  5. import java.util.ArrayList;
  6. import java.util.HashMap;
  7. /**
  8. * @author yx
  9. * @date 2022-09-04 13:54
  10. */
  11. public class NO3 {
  12. static PrintWriter out=new PrintWriter(System.out);
  13. static BufferedReader ins=new BufferedReader(new InputStreamReader(System.in));
  14. static StreamTokenizer in=new StreamTokenizer(ins);
  15. public static void main(String[] args) throws IOException {
  16. in.nextToken();int N=(int) in.nval;
  17. in.nextToken();int a=(int) in.nval;
  18. in.nextToken();int b=(int) in.nval;
  19. int max_fwn=0;
  20. int max_fww=0;
  21. int min_fww=100000000;
  22. boolean flag=false;
  23. int count=0;
  24. HashMap<Integer,ArrayList<String>> map=new HashMap<>();
  25. ArrayList<String> list=new ArrayList<>();
  26. for (int i = 0; i < N; i++) {
  27. String[] split=ins.readLine().split(" ");
  28. int temp=Integer.parseInt(split[1]);
  29. if(temp>=a && temp<=b ){
  30. flag=true;
  31. count++;
  32. if(!map.containsKey(temp)) {
  33. ArrayList<String> list1=new ArrayList<>();
  34. list1.add(split[0]);
  35. map.put(temp, list1);
  36. }else {
  37. map.get(temp).add(split[0]);
  38. }
  39. if(temp>max_fwn){
  40. max_fwn=temp;
  41. }
  42. }else {
  43. if(temp>max_fww){
  44. max_fww=temp;
  45. }
  46. if(temp<min_fww){
  47. min_fww=temp;
  48. }
  49. }
  50. }
  51. if(flag){
  52. out.println(count+" "+max_fwn);
  53. for (int i : map.keySet()) {
  54. if(i==max_fwn){
  55. int length=map.get(i).size();
  56. ArrayList<String> list2=map.get(i);
  57. for (int j = 0; j < length; j++) {
  58. out.println(list2.get(j));
  59. }
  60. }
  61. }
  62. }else {
  63. out.println(min_fww+" "+max_fww);
  64. }
  65. out.flush();
  66. }
  67. }

第三题是一个买月饼的题,类似于Basic Level中的第100道题:1100 校庆,多组数据处理,也是一道很常规的题目,很遗憾的是超时了,最后我想着用自定义类去做,发现还是超时两个点,一看限制时间:200ms,秒懂,直接放弃,Java选手的悲哀!!!

🎈第四题

  1. package PAT2022秋季;
  2. import java.io.*;
  3. import java.util.ArrayList;
  4. import java.util.Arrays;
  5. import java.util.HashMap;
  6. /**
  7. * @author yx
  8. * @date 2022-09-04 14:26
  9. */
  10. public class NO4 {
  11. static PrintWriter out=new PrintWriter(System.out);
  12. static BufferedReader ins=new BufferedReader(new InputStreamReader(System.in));
  13. static StreamTokenizer in=new StreamTokenizer(ins);
  14. public static void main(String[] args) throws IOException {
  15. in.nextToken();int n=(int) in.nval;
  16. in.nextToken();int h=(int) in.nval;
  17. // HashMap<Integer,Integer> map=new HashMap<>();
  18. ArrayList<Integer> list=new ArrayList<>();
  19. int max_numbers=0;
  20. int x_=0;
  21. int duoYu=0;
  22. //读入数据
  23. for (int i = 0; i < n; i++) {
  24. in.nextToken();int temp=(int) in.nval;
  25. list.add(temp);
  26. }
  27. for (int i = 0; i < n ; i++) {
  28. int temp1=list.get(i);
  29. for (int j = i; j < n; j++) {
  30. int temp2=list.get(j);
  31. if(temp1+h>=temp2){
  32. if(j-i+1>max_numbers){
  33. max_numbers=j-i+1;
  34. x_=temp1;
  35. duoYu=temp1+h-temp2;
  36. }
  37. }
  38. }
  39. }
  40. out.println((x_-duoYu)+" "+max_numbers);
  41. out.flush();
  42. }
  43. }

第四题有点滑动窗口的意思,其实也就是一个区间问题,在110题中也有出现,具体是哪一个题目我有点忘记了,这种题LeetCode上也碰到过很多次,题目不难,但还是超时了两个点,没拿到满分,原因不言而喻限时:200ms,Java选手再一次自觉的选择了pass!

🎈第五题

  1. package PAT2022秋季;
  2. import java.io.*;
  3. import java.util.Arrays;
  4. /**
  5. * @author yx
  6. * @date 2022-09-04 14:52
  7. */
  8. public class NO5 {
  9. static PrintWriter out=new PrintWriter(System.out);
  10. static BufferedReader ins=new BufferedReader(new InputStreamReader(System.in));
  11. static StreamTokenizer in=new StreamTokenizer(ins);
  12. public static void main(String[] args) throws IOException {
  13. in.nextToken();int n=(int) in.nval;
  14. boolean isTrue=false;
  15. for (int i = 0; i < n; i++) {
  16. in.nextToken();
  17. int m = (int) in.nval;
  18. int[] nums = new int[m];
  19. int flag = 0;
  20. for (int j = 0; j < m; j++) {
  21. in.nextToken();
  22. nums[j] = (int) in.nval;
  23. }
  24. int[] temp = Arrays.copyOf(nums, m);
  25. Arrays.sort(temp);
  26. for (int j = 1; j < m - 1; j++) {
  27. isTrue = false;
  28. if (temp[0] == nums[0] && temp[m - 1] == nums[m - 1]) {
  29. System.out.println("Yes");
  30. isTrue = true;
  31. break;
  32. }
  33. if (temp[j] == nums[j] && nums[j]>=temp[j-1] && nums[j]<=temp[j+1]) {
  34. if (temp[0] == nums[0] && temp[m - 1] != nums[m - 1]) {
  35. System.out.println("Yes");
  36. isTrue = true;
  37. break;
  38. }
  39. if (temp[0] != nums[0] && temp[m - 1] == nums[m - 1]) {
  40. System.out.println("Yes");
  41. isTrue = true;
  42. break;
  43. }
  44. flag++;
  45. }
  46. }
  47. if (!isTrue) {
  48. if (flag == 3) {
  49. System.out.println("Yes");
  50. } else {
  51. System.out.println("No");
  52. }
  53. }
  54. }
  55. }
  56. }

最后一题是一道快速排序的题目,类似于Basic Level的第35题PTA,但是很遗憾,这道题目我有两个点没拿到,看了一会还是找不出原因,于是就准备交卷跑路了,后续坐等满分大神出题解!

📖总结与分享

  1. Java真的不适合写算法(至少不适合PAT),虽然它有很多非常香的**API**可以用,但是真的太慢了,因为底层有一个**Java虚拟机**,即使我已经使用**IO流**去接收数据了,但在PAT上面只要有限时**200ms**以下的题目必超时两个点,Java选手的的悲哀莫过于此,这次**秋季赛**就栽了,第三题和第四题都超时两个点(因为超时多扣了10分,祭!!),本来还想优化一下,一看限时**200ms**,秒懂,直接提前交卷,下图Basic Level只拿到了2095分,剩下的105分都是Java的超时导致的!

后续等数学建模国赛结束,准备肝****甲级,感兴趣的小伙伴可以关注博主😘

标签: java jvm servlet

本文转载自: https://blog.csdn.net/m0_55858611/article/details/126695422
版权归原作者 小羊不会飞 所有, 如有侵权,请联系我们删除。

“【PAT乙】2022秋季赛后总结”的评论:

还没有评论