IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【蓝桥杯备考】Acwing周赛 第41场 Java题解 -> 正文阅读

[数据结构与算法]【蓝桥杯备考】Acwing周赛 第41场 Java题解

🏠:博客首页: 进击的波吉
📕:今日分享的文章: Acwing周赛 第41场 Java题解
💝:坚持刷Acwing周赛,分享前三题题解🎈
🌱:Boji 还在努力准备蓝桥杯 ,如有疑问、疏漏之处,请多多指点🙏
??:自学成长的路上,感谢大家相伴!No hurry , No Pause !💝

?? 距离蓝桥杯大约还有一个月时间,决定开刷 Acwing周赛,y总近几期的周赛难度也是对标蓝桥杯的,吸纳了别人优秀的题解,总结出来Java题解!

4308. 组合字符串

??求最小的组合字符串 :第二个字符串可以只取第一个,取第一个字符串中比较小的且比第二个字符串首位小的字符!

题解

import java.util.* ;

public class Main{
    public static  void main(String[] args) {
        Scanner sc = new Scanner(System.in) ;

        char[] a = sc.next().toCharArray() ;
        char[] b = sc.next().toCharArray() ;
         String str = String.valueOf( a[0]);
         String str1 = String.valueOf(b[0]) ;

        for (int i = 1; i< a.length; i++) {
            if (a[i] < str.charAt(i-1)) str += String.valueOf(a[i]) ;
            else if (a[i] < str1.charAt(0)) str += String.valueOf(a[i]) ; 
            else break ;
        }
        String s = str + str1 ;
        System.out.println(s) ;
    }
}

4309. 消灭老鼠

?? 主要难点:

  • 斜率表示 ,精读的范围在测试中,就被卡了,因此建议 斜率的问题 用向量表示
  • 数据保存用set方法存储 slope,会默认判重
  • 欧几里得公式,求最大公约数公式 (模板熟记)

题解

import java.util.* ;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in) ;
        int n = sc.nextInt() ;
        int x0 = sc.nextInt() ;
        int y0 = sc.nextInt() ;
        Set<String> slopes = new HashSet() ; 
        while(n-- > 0) {
            int a = sc.nextInt() ;
            int b = sc.nextInt() ;
            //计算 横纵坐标的差值
            a -= x0 ;
            b -= y0 ;
            int c = gcd(a, b) ;
            //set可以判重,因此只需要保存 斜率的最简比
            slopes.add(a/c + "/" + b/c ) ;
        }
        System.out.println(slopes.size()) ;
    }
    //欧几里得公式 求最大公约数 
    public static int gcd(int a, int b) {
        return b!=0 ? gcd(b, a%b): a ;
    }
}

4310. 树的DFS

?? 主要难点:

  • 邻接表的创建, 用ArrayList
  • 坐标的转换与理解,DFS中对应第i个点 以及它的下标
  • dfs遍历二叉树的理解
import java.io.* ;
import java.util.* ;

public class Main {
    public static int N = (int)2e5+10 ;
    public static int[] q = new int[N] ; //存储dfs中第i个点是哪个
    public static int[] p = new int[N] ; //存储点i在 dfs中的下标
    public static int[] sz = new int[N] ; //存储点i的根子树大小
    public static int n, m ;
    public static int top = 0 ; //存储当前存储的第几个数
    public static ArrayList<Integer>g[] = new ArrayList[N] ; //存储邻接表
    
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) ;
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        String[] s = br.readLine().split(" ") ;
        n = Integer.parseInt(s[0]) ;
        m = Integer.parseInt(s[1]) ;
        //创建邻接表
        for (int i = 0; i < N ;i++) g[i] = new ArrayList<>() ;
        
        
        String[] str = br.readLine().split(" ") ;
        int idx = 0 ;
        for (int i = 2; i<= n; i++) {
            //存储父节点t的邻边, 构建邻接表
            int t = Integer.parseInt(str[idx++]) ;
            g[t].add(i);
        }
        
        dfs(1) ; //遍历树,初始化二叉树的 q[i] 和 p[i]值 
        
        while(m-- >0 ){
            String[] s2 = br.readLine().split(" ") ;
            int u = Integer.parseInt(s2[0]) ;
            int k = Integer.parseInt(s2[1]) ;
            // k 超过u子树的范围, 则返回-1
            if (k > sz[u]) bw.write("-1\n") ;
            else bw.write(q[ p[u] + k-1 ] + "\n" ) ; //在范围中,则去 根节点u的第k-1个数 
        }
        
        bw.flush() ;
        bw.close() ;
        br.close() ;
    }
    
    public static void dfs(int u) {
        sz[u] = 1 ; //一个点对应一个节点数
        q[top] = u ;//dfs 第 top 个数 为 u ;
        p[u] = top ;//dfs中 u 的下标为 top ;
        top++ ; //top +1 
        
        //遍历子树,若邻接表为空,跳过; 若邻接表不为空, 遍历子树
        for (var v : g[u]) {
            dfs(v) ;
            sz[u] += sz[v] ; //记录子树段的大小
        }
    }
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:48:16  更:2022-03-08 22:51:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 13:52:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码