当前位置: 首页 > news >正文

【PAT乙】2022秋季赛后总结

目录

✨前言

👉🏻历史回顾👈🏻

 ✏️真题回忆

🎈第一题

🎈第二题

🎈第三题

🎈第四题

🎈第五题

📖总结与分享

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

✨前言

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

👉🏻历史回顾👈🏻

PAT乙级

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

 ✏️真题回忆

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

🎈第一题

package PAT乙2022秋季;

import java.io.*;

/**
 * @author yx
 * @date 2022-09-04 13:25
 */
public class NO1 {
    static PrintWriter out=new PrintWriter(System.out);
    static BufferedReader ins=new BufferedReader(new InputStreamReader(System.in));
    static StreamTokenizer in=new StreamTokenizer(ins);
    public static void main(String[] args) throws IOException {
        in.nextToken();int a0=(int) in.nval;
        in.nextToken();int n=(int) in.nval;
        for (int i = 0; i < n; i++) {
            a0=sum_i(a0*a0*a0+1);
        }
        System.out.println(a0);
    }
    static int sum_i(int n){
        int sum=0;
        while (n!=0){
            sum+=n%10;
            n=n/10;
        }
        return sum;
    }
}

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

🎈第二题

package PAT乙2022秋季;

import java.io.*;
import java.util.ArrayList;
import java.util.HashSet;

/**
 * @author yx
 * @date 2022-09-04 13:32
 */
public class NO2 {
    static PrintWriter out=new PrintWriter(System.out);
    static BufferedReader ins=new BufferedReader(new InputStreamReader(System.in));
    static StreamTokenizer in=new StreamTokenizer(ins);
    public static void main(String[] args) throws IOException {
        in.nextToken();int m=(int) in.nval;
        in.nextToken();int k=(int) in.nval;
        String[] split=ins.readLine().split("");
        HashSet<Integer> set=new HashSet<>();
        int n=0;
        int ans=0;
        for (int i = 0; i < m; i++) {
            if(split[i].equals("A")){
                n=bHua_A(n);
                set.add(n);
            }else {
                n=bHua_B(n);
                set.add(n);
            }
//            System.out.println(n);
        }
        ArrayList<Integer> list=new ArrayList<>(set);
        for (int i = 0; i < list.size(); i++) {
            if(list.get(i)<=k){
                ans++;
//                System.out.print(list.get(i)+" ");
            }
        }
        System.out.println(ans);
    }
    static int bHua_A(int n){
        return n/4;
    }
    static int bHua_B(int n){
        return (8*n+1);
    }
}

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

🎈第三题

package PAT乙2022秋季;

import com.sun.deploy.util.SyncAccess;
import com.sun.xml.internal.bind.v2.runtime.reflect.Lister;

import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;

/**
 * @author yx
 * @date 2022-09-04 13:54
 */
public class NO3 {
    static PrintWriter out=new PrintWriter(System.out);
    static BufferedReader ins=new BufferedReader(new InputStreamReader(System.in));
    static StreamTokenizer in=new StreamTokenizer(ins);

    public static void main(String[] args) throws IOException {
        in.nextToken();int N=(int) in.nval;
        in.nextToken();int a=(int) in.nval;
        in.nextToken();int b=(int) in.nval;
        int max_fwn=0;
        int max_fww=0;
        int min_fww=100000000;
        boolean flag=false;
        int count=0;
        HashMap<Integer,ArrayList<String>> map=new HashMap<>();
        ArrayList<String> list=new ArrayList<>();
        for (int i = 0; i < N; i++) {
            String[] split=ins.readLine().split(" ");
            int temp=Integer.parseInt(split[1]);
            if(temp>=a && temp<=b ){
                flag=true;
                count++;
                if(!map.containsKey(temp)) {
                    ArrayList<String> list1=new ArrayList<>();
                    list1.add(split[0]);
                    map.put(temp, list1);
                }else {
                    map.get(temp).add(split[0]);
                }
                if(temp>max_fwn){
                    max_fwn=temp;
                }
            }else {
                if(temp>max_fww){
                    max_fww=temp;
                }
                if(temp<min_fww){
                    min_fww=temp;
                }
            }
        }
        if(flag){
            out.println(count+" "+max_fwn);
            for (int i : map.keySet()) {
                if(i==max_fwn){
                  int length=map.get(i).size();
                  ArrayList<String> list2=map.get(i);
                    for (int j = 0; j < length; j++) {
                        out.println(list2.get(j));
                    }
                }
            }
        }else {
            out.println(min_fww+" "+max_fww);
        }
        out.flush();
    }
}

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

🎈第四题

package PAT乙2022秋季;

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;

/**
 * @author yx
 * @date 2022-09-04 14:26
 */
public class NO4 {
    static PrintWriter out=new PrintWriter(System.out);
    static BufferedReader ins=new BufferedReader(new InputStreamReader(System.in));
    static StreamTokenizer in=new StreamTokenizer(ins);

    public static void main(String[] args) throws IOException {
        in.nextToken();int n=(int) in.nval;
        in.nextToken();int h=(int) in.nval;
//        HashMap<Integer,Integer> map=new HashMap<>();
        ArrayList<Integer> list=new ArrayList<>();
        int max_numbers=0;
        int x_=0;
        int duoYu=0;
        //读入数据
        for (int i = 0; i < n; i++) {
            in.nextToken();int temp=(int) in.nval;
            list.add(temp);
        }
        for (int i = 0; i < n ; i++) {
            int temp1=list.get(i);
            for (int j = i; j < n; j++) {
                int temp2=list.get(j);
                if(temp1+h>=temp2){
                    if(j-i+1>max_numbers){
                        max_numbers=j-i+1;
                        x_=temp1;
                        duoYu=temp1+h-temp2;
                    }
                }
            }
        }
        out.println((x_-duoYu)+" "+max_numbers);
        out.flush();
    }
}

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

🎈第五题

package PAT乙2022秋季;

import java.io.*;
import java.util.Arrays;

/**
 * @author yx
 * @date 2022-09-04 14:52
 */
public class NO5 {
    static PrintWriter out=new PrintWriter(System.out);
    static BufferedReader ins=new BufferedReader(new InputStreamReader(System.in));
    static StreamTokenizer in=new StreamTokenizer(ins);

    public static void main(String[] args) throws IOException {
        in.nextToken();int n=(int) in.nval;
        boolean isTrue=false;
        for (int i = 0; i < n; i++) {
            in.nextToken();
            int m = (int) in.nval;
            int[] nums = new int[m];
            int flag = 0;
            for (int j = 0; j < m; j++) {
                in.nextToken();
                nums[j] = (int) in.nval;
            }
            int[] temp = Arrays.copyOf(nums, m);
            Arrays.sort(temp);
            for (int j = 1; j < m - 1; j++) {
                isTrue = false;
                if (temp[0] == nums[0] && temp[m - 1] == nums[m - 1]) {
                    System.out.println("Yes");
                    isTrue = true;
                    break;
                }
                if (temp[j] == nums[j] && nums[j]>=temp[j-1] && nums[j]<=temp[j+1]) {
                    if (temp[0] == nums[0] && temp[m - 1] != nums[m - 1]) {
                        System.out.println("Yes");
                        isTrue = true;
                        break;
                    }
                    if (temp[0] != nums[0] && temp[m - 1] == nums[m - 1]) {
                        System.out.println("Yes");
                        isTrue = true;
                        break;
                    }
                    flag++;
                }
            }
            if (!isTrue) {
                if (flag == 3) {
                    System.out.println("Yes");
                } else {
                    System.out.println("No");
                }
            }
        }
    }
}

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

📖总结与分享

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

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

相关文章:

  • nginx + tomcat 搭建负载均衡、动静分离(tomcat多实例)
  • CSRF(跨站请求伪造)攻击和预防
  • 【都 Java17 了,还不了解 Java 8 ? 】一文带你深入了解 Java 8 新特性
  • 解决国产机SVN连接失败的问题
  • MySQL 存储过程创建指定表结构
  • 我们这样的人
  • < Linux > 进程概念(2)
  • Qt5开发从入门到精通——第四篇十二节(不规则窗体)
  • MySQL 5.7.x--命令行自带帮助文档的使用,超级棒!!!
  • 手撕前端面试题【javascript】
  • Qt5开发从入门到精通——第四篇十三节(程序启动画面 )
  • postman+Newman+jenkins实现接口自动化测试持续集成
  • 阿里达摩院(研究型实习生)
  • 汽车电子常用外围硬件电路设计
  • 猿创征文|半导体二极管
  • [笔记] php常见简单功能及函数
  • “大数据应用场景”之隔壁老王(连载四)
  • 2017 年终总结 —— 在路上
  • Android优雅地处理按钮重复点击
  • Bytom交易说明(账户管理模式)
  • C++入门教程(10):for 语句
  • Hexo+码云+git快速搭建免费的静态Blog
  • JavaScript设计模式与开发实践系列之策略模式
  • JS笔记四:作用域、变量(函数)提升
  • LeetCode算法系列_0891_子序列宽度之和
  • 前端性能优化——回流与重绘
  • 深入 Nginx 之配置篇
  • 微服务框架lagom
  • 正则表达式
  • Spring Batch JSON 支持
  • ​MySQL主从复制一致性检测
  • #100天计划# 2013年9月29日
  • #每日一题合集#牛客JZ23-JZ33
  • (libusb) usb口自动刷新
  • (Oracle)SQL优化技巧(一):分页查询
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (九)c52学习之旅-定时器
  • (四)模仿学习-完成后台管理页面查询
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (五)关系数据库标准语言SQL
  • (学习日记)2024.01.09
  • (一)RocketMQ初步认识
  • (译) 函数式 JS #1:简介
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)【Hibernate总结系列】使用举例
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .NET Core WebAPI中封装Swagger配置
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .net6+aspose.words导出word并转pdf
  • .NET命令行(CLI)常用命令
  • @31省区市高考时间表来了,祝考试成功
  • @Autowired @Resource @Qualifier的区别