第十届蓝桥杯省赛JavaC组真题——详细答案对照(完整版-包含打扫机器人的视频全过程讲解与编码内容对照)-2

简介: 第十届蓝桥杯省赛JavaC组真题——详细答案对照(完整版-包含打扫机器人的视频全过程讲解与编码内容对照)

F、旋转


试题 F: 旋转

时间限制: 1.0s 内存限制: 512.0MB 本题总分:15 分

【问题描述】

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

针旋转 90 度。

我们用一个 n × m 的二维数组来表示一个图片,例如下面给出一个 3 × 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

【评测用例规模与约定】

对于 30% 的评测用例,1 ≤ n, m ≤ 10。

对于 60% 的评测用例,1 ≤ n, m ≤ 30。

对于所有评测用例,1 ≤ n, m ≤ 100。


题解:

package action;
import java.util.Scanner;
public class demo {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int m = sc.nextInt();
    int [][] arr = new int[n+1][m+1];
    for (int i = 1; i < arr.length; i++) {
      for (int j = 1; j < arr[i].length; j++) {
        arr[i][j] = sc.nextInt();
      }
    }
    int [][] brr = new int[m+1][n+1];
    // 转换
    for (int i = 1; i < brr.length; i++) {
      for (int j = 1; j < brr[i].length; j++) {
        brr[i][j] = arr[n-j+1][i]; 
      }
    }
    // 打印
    for (int i = 1; i < brr.length; i++) {
      for (int j = 1; j < brr[i].length; j++) {
        System.out.print(brr[i][j]+" ");
      }
      System.out.println();
    }
  }
}

image.png


G、外卖店优先级


试题 G: 外卖店优先级

时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分

【问题描述】

“饱了么”外卖系统中维护着 N 家外卖店,编号 1 ∼ N。每家外卖店都有

一个优先级,初始时 (0 时刻) 优先级都为 0。

每经过 1 个时间单位,如果外卖店没有订单,则优先级会减少 1,最低减

到 0;而如果外卖店有订单,则优先级不减反加,每有一单优先级加 2。

如果某家外卖店某时刻优先级大于 5,则会被系统加入优先缓存中;如果

优先级小于等于 3,则会被清除出优先缓存。

给定 T 时刻以内的 M 条订单信息,请你计算 T 时刻时有多少外卖店在优

先缓存中。

【输入格式】

第一行包含 3 个整数 N、M 和 T。

以下 M 行每行包含两个整数 ts 和 id,表示 ts 时刻编号 id 的外卖店收到

一个订单。

【输出格式】

输出一个整数代表答案。

【样例输入】

2 6 6

1 1

5 2

3 1

6 2

2 1

6 2

【样例输出】

1

【样例解释】

6 时刻时,1 号店优先级降到 3,被移除出优先缓存;2 号店优先级升到 6,

加入优先缓存。所以是有 1 家店 (2 号) 在优先缓存中。

【评测用例规模与约定】

对于 80% 的评测用例,1 ≤ N, M, T ≤ 10000。

对于所有评测用例,1 ≤ N, M, T ≤ 100000,1 ≤ ts ≤ T,1 ≤ id ≤ N


题解:


package action;
import java.util.Scanner;
public class demo {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int m = sc.nextInt();
    int t = sc.nextInt();
    int[][] arr = new int[n + 1][t + 1];
    for (int i = 0; i < m; i++) {
      int t1 = sc.nextInt(); // 时刻
      int n1 = sc.nextInt(); // 几店
      arr[n1][t1]++; // n店t时刻的订单数
    }
    int count = 0; // 优先缓存个数
    // 对每家店进行计算
    for (int i = 1; i <= n; i++) {
      int num = 0; // 缓存值
      boolean f = false; // 判断是否是优先缓存
      for (int j = 1; j <= t; j++) {
        if (arr[i][j] == 0) { // 没有订单时
          if (num <= 0) {
            num = 0;
          } else {
            num--;
          }
        } else {
          num += 2 * arr[i][j]; // 有订单时:缓存值是每个订加2
        }
        if (num > 5) {
          f = true;
        }
        if (num <= 3) {
          f = false;
        }
      }
      if (f) {
        count++;
      }
    }
    System.out.println(count);
  }
}


测试数据通过

image.png


H、人物相关性分析

试题 H: 人物相关性分析

时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分

【问题描述】

小明正在分析一本小说中的人物相关性。他想知道在小说中 Alice 和 Bob

有多少次同时出现。

更准确的说,小明定义 Alice 和 Bob“同时出现”的意思是:在小说文本

中 Alice 和 Bob 之间不超过 K 个字符。

例如以下文本:

This is a story about Alice and Bob. Alice wants to send a private message to Bob.

假设 K = 20,则 Alice 和 Bob 同时出现了 2 次,分别是”Alice and Bob”

和”Bob. Alice”。前者 Alice 和 Bob 之间有 5 个字符,后者有 2 个字符。

注意:

1. Alice 和 Bob 是大小写敏感的,alice 或 bob 等并不计算在内。

2. Alice 和 Bob 应为单独的单词,前后可以有标点符号和空格,但是不能

有字母。例如 Bobbi 並不算出现了 Bob。

【输入格式】

第一行包含一个整数 K。

第二行包含一行字符串,只包含大小写字母、标点符号和空格。长度不超

过 1000000。

【输出格式】

输出一个整数,表示 Alice 和 Bob 同时出现的次数。

【样例输入】

20

This is a story about Alice and Bob. Alice wants to send a private message to Bob.

【样例输出】

2

【评测用例规模与约定】

对于所有评测用例,1 ≤ K ≤ 1000000。


题解:

package action;
import java.util.Scanner;
public class demo {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int K = sc.nextInt();
    sc.nextLine();
    String str = sc.nextLine();
    int count = 0;
    for (int i = 0; i < str.length() - 8; i++) {
      if (str.charAt(i) == 'A') {
        String alicestr = str.substring(i, i + 5);
        if (alicestr.equals("Alice")) {
          for (int j = 0; j < K - 3; j++) {
            if (str.charAt(i + j) == 'B') {
              String bobstr = str.substring(i + j, i + j + 3);
              if (bobstr.equals("Bob")) {
                count++;
              }
            }
          }
        }
      }
      if (str.charAt(i) == 'B') {
        String bobstr = str.substring(i, i + 3);
        System.out.println(bobstr);
        if (bobstr.equals("Bob")) {
          for (int j = 0; j < K - 5; j++) {
            if (str.charAt(i + j) == 'A') {
              String alicestr = str.substring(i + j, i + j + 5);
              System.out.println(alicestr);
              if (alicestr.equals("Alice")) {
                count++;
              }
            }
          }
        }
      }
    }
    System.out.println(count);
  }
}

测试数据通过

image.png

I、等差数列


试题 I: 等差数列

时间限制: 1.0s 内存限制: 512.0MB 本题总分:25 分

【问题描述】

数学老师给小明出了一道等差数列求和的题目。但是粗心的小明忘记了一

部分的数列,只记得其中 N 个整数。

现在给出这 N 个整数,小明想知道包含这 N 个整数的最短的等差数列有

几项?

【输入格式】

输入的第一行包含一个整数 N。

第二行包含 N 个整数 A1, A2, · · · , AN。(注意 A1 ∼ AN 并不一定是按等差数

列中的顺序给出)

【输出格式】

输出一个整数表示答案。

【样例输入】

5

2 6 4 10 20

【样例输出】

10

【样例说明】

包含 2、6、4、10、20 的最短的等差数列是 2、4、6、8、10、12、14、16、

18、20。

【评测用例规模与约定】

对于所有评测用例,2 ≤ N ≤ 100000,0 ≤ Ai ≤ 109。


题解:

package action;
import java.util.Arrays;
import java.util.Scanner;
public class demo {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int[] arr = new int[n];
    for (int i = 0; i < arr.length; i++) {
      arr[i] = sc.nextInt();
    }
    Arrays.sort(arr);
    // 获取最小差值
    int min = arr[arr.length - 1];
    for (int i = 1; i < arr.length; i++) {
      if ((arr[i] - arr[0]) < min) {
        min = (arr[i] - arr[0]);
      }
    }
    System.out.println((arr[arr.length - 1] - arr[0]) / min + 1);
  }
}

image.png


J、打扫机器人

试题 J: 扫地机器人

时间限制: 1.0s 内存限制: 512.0MB 本题总分:25 分

【问题描述】

小明公司的办公区有一条长长的走廊,由 N 个方格区域组成,如下图所

示。

image.png


走廊内部署了 K 台扫地机器人,其中第 i 台在第 Ai 个方格区域中。

已知扫地机器人每分钟可以移动到左右相邻的方格中,并将该区域清扫干

净。

请你编写一个程序,计算每台机器人的清扫路线,使得

1. 它们最终都返回出发方格,

2. 每个方格区域都至少被清扫一遍,

3. 从机器人开始行动到最后一台机器人归位花费的时间最少。

注意多台机器人可以同时清扫同一方块区域,它们不会互相影响。

输出最少花费的时间。

在上图所示的例子中,最少花费时间是 6。第一台路线:2-1-2-3-4-3-2,清

扫了 1、2、3、4 号区域。第二台路线 5-6-7-6-5,清扫了 5、6、7。第三台路线

10-9-8-9-10,清扫了 8、9 和 10。

【输入格式】

第一行包含两个整数 N 和 K。

接下来 K 行,每行一个整数 Ai。


案例:

输入:

10 3

3 5 8

输出:

6



题解视频:

JavaC组第十届第十题扫地机器人_哔哩哔哩_bilibili

题解:

package action;
import java.util.Arrays;
import java.util.Scanner;
public class demo {
  static int N,K;
  static int arr[];//存储机器人坐标
  public static void main(String[] args) {
    Scanner sc=new Scanner(System.in);
    N=sc.nextInt();
    K=sc.nextInt();
    arr=new int[K];
    for (int i = 0; i < K; i++) {
      arr[i]=sc.nextInt();
    }
    //输入流没用了
    sc.close();
    Arrays.sort(arr);//自然排序
    int l=0,r=N,mid=0;
    while (l <= r) {
      //相当于二分查找
      mid=(r+l)>>>1;
      if(check(mid)) {
        r = mid-1;
      }else l = mid+1; 
    }
    System.out.println((mid-1)*2);
  }
  private static boolean check(int m) {
    int sum=0;//记录扫描区域
    for (int i = 0; i < K; i++) {//遍历每个机器人
      if(arr[i]-m<=sum) {
        if(arr[i]<=sum) {
          sum=arr[i]+m-1;
        }else sum+=m;
      }else return false;
    }
    return sum >= N;
  }
}

测试数据:

10 3
 5 2 10

image.png

相关文章
|
5天前
|
机器学习/深度学习 人工智能 测试技术
第十三届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
第十三届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
222 0
|
5天前
|
小程序 JavaScript Java
基于Java的大学生心理健康答题小程序设计与实现(亮点:选题新颖、可以发布试卷设置题目、自动判卷、上传答案、答案解析)
基于Java的大学生心理健康答题小程序设计与实现(亮点:选题新颖、可以发布试卷设置题目、自动判卷、上传答案、答案解析)
56 0
|
11月前
|
存储 机器学习/深度学习 JSON
【Python考试资源】包含重点知识、坑点知识,期末考试看这一份就够了
本文章总结Python的各类知识,并将知识之间进行对比,对期末考试非常有效
177 0
|
缓存 人工智能 机器人
第十届蓝桥杯省赛JavaC组真题——详细答案对照(完整版-包含打扫机器人的视频全过程讲解与编码内容对照)-2
第十届蓝桥杯省赛JavaC组真题——详细答案对照(完整版-包含打扫机器人的视频全过程讲解与编码内容对照)
173 0
第十届蓝桥杯省赛JavaC组真题——详细答案对照(完整版-包含打扫机器人的视频全过程讲解与编码内容对照)-2
|
机器人
第十届蓝桥杯省赛JavaC组真题——详细答案对照(完整版-包含打扫机器人的视频全过程讲解与编码内容对照)-1
第十届蓝桥杯省赛JavaC组真题——详细答案对照(完整版-包含打扫机器人的视频全过程讲解与编码内容对照)
101 0
第十届蓝桥杯省赛JavaC组真题——详细答案对照(完整版-包含打扫机器人的视频全过程讲解与编码内容对照)-1
|
人工智能 数据安全/隐私保护
第七届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-1
第七届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
125 0
|
人工智能 C++
第七届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-2
第七届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
105 0
|
人工智能 测试技术
第十一届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-3
第十一届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
139 0
第十一届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-3
|
测试技术
第十一届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-2
第十一届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
80 0
第十一届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-2
|
数据安全/隐私保护
第十一届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-1
第十一届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)
74 0
第十一届蓝桥杯省赛JavaC组真题——详细答案对照(完整版)-1