蓝桥杯31天真题冲刺|题解报告|第二十四天

大家好,我是snippet,今天是刷蓝桥真题的第二十四天,下面是我今天的题解 

目录

一、旋转

题目描述

输入描述

输出描述

输入输出样例

二、附近最小

问题描述

输入格式

输出格式

样例输入

样例输出

评测用例规模与约定

运行限制

三、扫地机器人

四、窗口


一、旋转

题目链接:旋转 - 蓝桥云课 (lanqiao.cn)

题目内容:

题目描述

图片旋转是对图片最简单的处理方式之一,在本题中,你需要对图片顺时针旋转 90 度。

我们用一个 n×m 的二维数组来表示一个图片,例如下面给出一个 3×43×4 的 图片的例子:

1 3 5 7

9 8 7 6

3 5 9 7

这个图片顺时针旋转 90 度后的图片如下:

3 9 1

5 8 3

9 7 5

7 6 7

给定初始图片,请计算旋转后的图片。

输入描述

输入的第一行包含两个整数 n,m,分别表示行数和列数。

接下来 n 行,每行 m 个整数,表示给定的图片。图片中的每个元素(像 素)为一个值为 0 至 255 之间的整数(包含 0 和 255)。

输出描述

输出 m 行 n 列,表示旋转后的图片。

输入输出样例

示例

输入

3 4
1 3 5 7
9 8 7 6
3 5 9 7

 

输出

3 9 1
5 8 3
9 7 5
7 6 7

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

解题思路:

行输入,列输出

代码:

package 蓝桥杯31天真题冲刺.Day24;

import java.io.*;

/**
 * @author snippet
 * @data 2023-03-27
 * 旋转-蓝桥云课
 */
public class T1_旋转 {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));

    static int n,m;
    static int N = 300;
    static int[][] arr = new int[N][N];

    public static void main(String[] args) throws IOException {
        String[] s = br.readLine().split(" ");
        n = Integer.parseInt(s[0]);
        m = Integer.parseInt(s[1]);
        for (int i = 1; i <= n; i++) {
            s = br.readLine().split(" ");
            for (int j = 1; j <= m; j++) {
                arr[i][j] = Integer.parseInt(s[j-1]);
            }
        }
        for (int i = 1; i <= m; i++) {
            for (int j = n; j >= 1; j--) {
                pw.print(arr[j][i] + " ");
            }
            pw.println();
        }
        pw.flush();
        br.close();
    }
}

二、附近最小

题目链接:附近最小 - 蓝桥云课 (lanqiao.cn)

题目内容:

问题描述

小蓝有一个序列 a[1],a[2],...,a[n]。

给定一个正整数 k,请问对于每一个 11 到 n 之间的序号 i,...,a[i−k],a[i−k+1],...,a[i+k] 这 2k+1 个数中的最小值是多少?

当某个下标超过 1 到 n 的范围时,数不存在,求最小值时只取存在的那些值。

输入格式

输入的第一行包含一整数 n。

第二行包含 n 个整数,分别表示 a[1],a[2],...,a[n]。

第三行包含一个整数 k 。

输出格式

输出一行,包含 n 个整数,分别表示对于每个序号求得的最小值。

样例输入


5 2 7 4 3 

样例输出

2 2 2 3 3

评测用例规模与约定

对于 30% 的评测用例,1<=n<=1000,1<=a[i]<=1000。

对于 50% 的评测用例,1<=n<=10000,1<=a[i]<=10000。

对于所有评测用例,1<=n<=1000000,1<=a[i]<=1000000。

运行限制

语言最大运行时间最大运行内存
C++1s256M
C1s256M
Java3s256M
Python312s512M

解题思路:

这个题考查的是单调队列,我们将每个队列里面的数控制为该数在1 <--> 2k+1之间,如果这个数已经不满足遍历的数的区间则从头出 如果是满足的从尾进 输出的时候遍历双端队列的头

代码:

package 蓝桥杯31天真题冲刺.Day24;

import java.io.*;
import java.util.ArrayDeque;
import java.util.Deque;

/**
 * @author snippet
 * @data 2023-03-27
 * 附近最小-蓝桥云课
 */
// 单调队列
public class T2_附近最小 {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));

    static int n,k;
    static int N = 2000100;
    static int[] arr = new int[N];

    public static void main(String[] args) throws IOException {
        String[] s = br.readLine().split(" ");
        n = Integer.parseInt(s[0]);
        s = br.readLine().split(" ");
        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(s[i]);
        }
        k = Integer.parseInt(br.readLine().split(" ")[0]);
        Deque<Integer> deque = new ArrayDeque<>();
        deque.offerLast(arr[0]);
        // 2k+1个数中的最小值
        for (int i = 1; i <= k; i++) {
            while (!deque.isEmpty() && deque.peekLast() > arr[i]) deque.pollLast();
            deque.offerLast(arr[i]);
        }

        for (int i = 0; i < n; i++) {
            pw.print(deque.peekFirst() + " ");
            while (!deque.isEmpty() && i + k + 1 < n && deque.peekLast() > arr[i + k + 1]) deque.pollLast();
            deque.offerLast(arr[i + k + 1]);
            if (i - k >= 0 && deque.peekFirst() == arr[i - k]) deque.pollFirst();
        }
        pw.flush();
        br.close();
    }
}

三、扫地机器人

题目链接:扫地机器人 - 蓝桥云课 (lanqiao.cn)

四、窗口

题目链接:窗口 - 蓝桥云课 (lanqiao.cn)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
蓝桥杯是一个国内著名的计算机比赛,为了帮助参赛者更好地准备和了解比赛的型,组委会会公布历年的真并提供相应的题解。 首先,我们需要了解蓝桥杯是一个综合性的计算机比赛,测试的对象包括计算机基础知识、编程能力以及解决实际问的能力。 在历年的真中,参赛者将面临不同类型的目,包括算法设计与优化问、数据结构与算法问、编程等。其中针对Python B组的目主要考察的是对Python语言的掌握和应用能力。 目解答一般会包含以下几个方面的内容: 1. 目分析与理解:读取目,理解目的要求和限制条件。通过仔细分析目,确定目的输入与输出,以及问的核心。 2. 设计解决方案:根据目要求和限制条件,设计一个合适的解决方案。可以使用合适的算法和数据结构来解决问,并做出相应的性能优化。 3. 编写代码实现:根据设计的方案编写相应的代码实现。需要注意的是,Python语言有其独特的语法和特性,掌握好这些特性可以更好地完成编程任务。 4. 调试与测试:编写完代码后,需要进行调试和测试。通过运行样例输入和输出,检查代码是否符合目要求,并且没有逻辑上的错误。 5. 总结与优化:在完成目解答后,可以进行总结和优化。包括分析算法复杂度、代码风格和可读性等方面,以便在比赛中更好地表现。 在准备蓝桥杯时,可以通过阅读历年的真题解来了解比赛的难度和类型,针对性地进行练习和提高。同时也可以参加相关的培训班和讨论活动,与其他参赛者交流经验和技巧。 总而言之,历年蓝桥杯的解答对于提高自己的编程能力和应对比赛非常有帮助。通过认真分析和实践,可以更好地理解并掌握Python编程,并在比赛中取得更好的成绩。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值