第十五届蓝桥杯模拟赛(第一期)

news2024/11/26 19:24:40

大家好,我是晴天学长,本次分享,制作不易,需要的小伙伴可以点赞关注评论一波哦!后续会继续更新的。💪💪💪

  • 还在持续更新中,目前只更新了部分内容。

一 .找数位

在这里插入图片描述
问题描述
  请找到一个大于 2022 的最小数,这个数转换成十六进制之后,所有的数位(不含前导 0)都为字母(A 到 F)。
  请将这个数的十进制形式作为答案提交。
答案提交
  这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。


1) .算法思路

  • 发现输出的过程中,最小的只有aaa,所以就是2730。

2).算法步骤


3). 代码实例

package LeetCodeTest.枚举;

import java.util.Scanner;

public class 最小数 {
    public static void main(String[] args) {
//        int t = Integer.parseInt("aaa",16);
//        System.out.println(t);
        Scanner scanner = new Scanner(System.in);
        int n = 2022;
        boolean watch = true;
        while (true) {
            String s = Integer.toString(n, 16);
            for (int i = 0; i < s.length(); i++) {
                char c = s.charAt(i);
                if ('0' <= c && c <= '9') {
                    watch = false;
                    break;
                }
            }
            if (watch == true){
                System.out.println(s);
                System.out.println(n);
                break;
            }
            n++;
        }
    }
}


4).总结
  • 答案:2730

二 . Excel2022

在这里插入图片描述
问题描述
  在 Excel 中,列的名称使用英文字母的组合。前 26 列用一个字母,依次为 A 到 Z,接下来 26*26 列使用两个字母的组合,依次为 AA 到 ZZ。
  请问第 2022 列的名称是什么?
答案提交
  这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个由大写字母组成的字符串,在提交答案时只填写这个字符串,填写多余的内容将无法得分。


1) .算法思路


2).算法步骤


3). 代码实例

  • Excel。
  • 手算。

4).总结

  • 答案:BYT

三 .数字之和

在这里插入图片描述
问题描述
 对于一个日期,我们可以计算出年份的各个数位上的数字之和,也可以分别计算月和日的各位数字之和。请问从 1900 年 1 月 1 日至 9999 年 12 月 31 日,总共有多少天,年份的数位数字之和等于月的数位数字之和加日的数位数字之和。
 例如,2022年11月13日满足要求,因为 2+0+2+2=(1+1)+(1+3) 。
  请提交满足条件的日期的总数量。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

1) .算法思路


2).算法步骤


3). 代码实例

package LanQiaoTest.时间模拟;

public class 年月日数位之和 {
    static int[] w = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    static int y = 1900, m = 1, d = 1;

    public static void main(String[] args) {
        int ans = 0;
        while (y != 9999 || m != 12 | d != 31) {
            if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) w[2] = 29;
            else w[2] = 28;
            if (check()) ans++;
            d++;
            if (d > w[m]) {
                m++;
                d = 1;
            }
            if (m > 12) {
                m = 1;
                y++;
            }
        }
        if (check()) ans++;
        System.out.println(ans);
    }

    static boolean check() {
        int ans = 0;
        int sum = 0;
        // 计算年的和
        int a = y;
        while (a > 0) {
            ans = a % 10;
            a /= 10;
        }
        int b = m;
        int c = d;
        while (b > 0) {
            sum += b % 10;
            b /= 10;
        }
        while (c > 0) {
            sum += c % 10;
            c /= 10;
        }
        return ans==sum;
    }
}

4).总结

  • 答案:173000。

四 .435种取法

在这里插入图片描述

问题描述
  小蓝有 30 个数,分别为:99, 22, 51, 63, 72, 61, 20, 88, 40, 21, 63, 30, 11, 18, 99, 12, 93, 16, 7, 53, 64, 9, 28, 84, 34, 96, 52, 82, 51, 77 。
  小蓝可以在这些数中取出两个序号不同的数,共有 30*29/2=435 种取法。
  请问这 435 种取法中,有多少种取法取出的两个数的乘积大于等于 2022 。 答案提交
  这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

1) .算法思路


2).算法步骤


3). 代码实例

package LanQiaoTest.枚举;

public class 取法 {
    public static void main(String[] args) {
        int ans = 0;
        int[] nums = {
                99, 22, 51, 63, 72, 61, 20, 88, 40, 21, 63, 30, 11, 18, 99, 12, 93, 16, 7, 53, 64, 9, 28, 84, 34, 96, 52, 82, 51, 77};
        for (int i = 0; i < nums.length - 1; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[i]*nums[j]>=2022){
                    ans++;
                }
            }
        }
        System.out.println(ans);
    }
}

4).总结

  • 答案:189。

五 . 最大连通分块

在这里插入图片描述
问题描述
小蓝有一个 30 行 60 列的数字矩阵,矩阵中的每个数都是 0 或 1 。
  110010000011111110101001001001101010111011011011101001111110
  010000000001010001101100000010010110001111100010101100011110
  001011101000100011111111111010000010010101010111001000010100
  101100001101011101101011011001000110111111010000000110110000
  010101100100010000111000100111100110001110111101010011001011
  010011011010011110111101111001001001010111110001101000100011
  101001011000110100001101011000000110110110100100110111101011
  101111000000101000111001100010110000100110001001000101011001
  001110111010001011110000001111100001010101001110011010101110
  001010101000110001011111001010111111100110000011011111101010
  011111100011001110100101001011110011000101011000100111001011
  011010001101011110011011111010111110010100101000110111010110
  001110000111100100101110001011101010001100010111110111011011
  111100001000001100010110101100111001001111100100110000001101
  001110010000000111011110000011000010101000111000000110101101
  100100011101011111001101001010011111110010111101000010000111
  110010100110101100001101111101010011000110101100000110001010
  110101101100001110000100010001001010100010110100100001000011
  100100000100001101010101001101000101101000000101111110001010
  101101011010101000111110110000110100000010011111111100110010
  101111000100000100011000010001011111001010010001010110001010
  001010001110101010000100010011101001010101101101010111100101
  001111110000101100010111111100000100101010000001011101100001
  101011110010000010010110000100001010011111100011011000110010
  011110010100011101100101111101000001011100001011010001110011
  000101000101000010010010110111000010101111001101100110011100
  100011100110011111000110011001111100001110110111001001000111
  111011000110001000110111011001011110010010010110101000011111
  011110011110110110011011001011010000100100101010110000010011
  010011110011100101010101111010001001001111101111101110011101
  如果从一个标为 1 的位置可以通过上下左右走到另一个标为 1 的位置,则称两个位置连通。与某一个标为 1 的位置连通的所有位置(包括自己)组成一个连通分块。
  请问矩阵中最大的连通分块有多大?
答案提交
  这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

1) .算法思路


2).算法步骤


3). 代码实例

package LanQiaoTest.BFS;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;

public class 最大的连通分快 {
    //遍位移
    static int[] dx = {0, 0, -1, 1};
    static int[] dy = {-1, 1, 0, 0};

    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String[] s;
        int[][] G = new int[30][60];
        //接受矩阵
        for (int i = 0; i < 30; i++) {
            s = in.readLine().split("");
            for (int j = 0; j < 60; j++) {

                G[i][j] = Integer.parseInt(s[j]);
            }
        }
        int max = 0;
        //遍历矩阵
        for (int i = 0; i < 30; i++) {
            for (int j = 0; j < 60; j++) {
                if (G[i][j] == 1) {
                    boolean[][] st = new boolean[30][60];
                    max = Math.max(max, bfs(i, j, st, G));
                }

            }
        }

        System.out.println(max);
    }

    private static int bfs(int x, int y, boolean[][] st, int[][] G) {
        int ans = 1;
        st[x][y] = true;
        Queue<int[]> queue = new LinkedList<>();
        //放入数据
        queue.offer(new int[]{x, y});
        while (!queue.isEmpty()) {
            //一步有几个
            int size = queue.size();
            while (size-- > 0) {
                int[] curr = queue.poll();
                int a = curr[0];
                int b = curr[1];
                //开枝散叶
                for (int i = 0; i < 4; i++) {
                    int newX = a + dx[i];
                    int newY = b + dy[i];
                    if (newX >= 0 && newX < 30 && newY >= 0 && newY < 60 && G[newX][newY] == 1 && st[newX][newY] == false) {
                        st[newX][newY] = true;
                        queue.offer(new int[]{newX, newY});
                        ans++;
                    }
                }
            }
        }
        return ans;
    }
}


4).总结

  • 答案:148.

六 .那一天?

在这里插入图片描述
问题描述
  给定一天是一周中的哪天,请问 n 天后是一周中的哪天?
输入格式
  输入第一行包含一个整数 w,表示给定的天是一周中的哪天,w 为 1 到 6 分别表示周一到周六,w 为 7 表示周日。
  第二行包含一个整数 n。
输出格式
  输出一行包含一个整数,表示 n 天后是一周中的哪天,1 到 6 分别表示周一到周六,7 表示周日。
样例输入
6
10
样例输出
2
评测用例规模与约定
  对于所有评测用例,1 <= n <= 1000000。

1) .算法思路


2).算法步骤


3). 代码实例

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int answer = (a + b % 7) % 7;
        if (answer == 0) {
            System.out.println(7);
        } else {
            System.out.println(answer);
        }
    }
}


4).总结


七 .信号塔

在这里插入图片描述

问题描述
  小蓝负责一块区域的信号塔安装,整块区域是一个长方形区域,建立坐标轴后,西南角坐标为 (0, 0), 东南角坐标为 (W, 0), 西北角坐标为 (0, H), 东北角坐标为 (W, H)。其中 W, H 都是整数。
  他在 n 个位置设置了信号塔,每个信号塔可以覆盖以自己为圆心,半径为 R 的圆形(包括边缘)。
  为了对信号覆盖的情况进行检查,小蓝打算在区域内的所有横纵坐标为整数的点进行测试,检查信号状态。其中横坐标范围为 0 到 W,纵坐标范围为 0 到 H,总共测试 (W+1) * (H+1) 个点。
  给定信号塔的位置,请问这 (W+1)*(H+1) 个点中有多少个点被信号覆盖。
输入格式
  输入第一行包含四个整数 W, H, n, R,相邻整数之间使用一个空格分隔。
  接下来 n 行,每行包含两个整数 x, y,表示一个信号塔的坐标。信号塔可能重合,表示两个信号发射器装在了同一个位置。
输出格式
  输出一行包含一个整数,表示答案。
样例输入
10 10 2 5
0 0
7 0
样例输出
57
评测用例规模与约定
  对于所有评测用例,1 <= W, H <= 100,1 <= n <= 100, 1 <= R <= 100, 0 <= x <= W, 0 <= y <= H。

1) .算法思路


2).算法步骤


3). 代码实例

package LanQiaoTest.BFS;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;

public class 信号塔 {
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static boolean[][] vis;
    static int w, h, n, r, count;
    static int[][] dis = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};


    //宽W,高H
    public static void main(String[] args) throws IOException {
        String[] s = br.readLine().split(" ");
        w = Integer.parseInt(s[0]);
        h = Integer.parseInt(s[1]);
        n = Integer.parseInt(s[2]);
        r = Integer.parseInt(s[3]);
        vis = new boolean[h + 1][w + 1];
        for (int i = 0; i < n; i++) {
            String[] temp = br.readLine().split(" ");
            bfs(new Node(Integer.parseInt(temp[0]), Integer.parseInt(temp[1])));
        }
        System.out.println(count);

    }

    private static void bfs(Node node) {
        Deque<Node> deque = new ArrayDeque<>();
        deque.addLast(node);
        while (!deque.isEmpty()) {
            Node poll = deque.pollFirst();
            for (int i = 0; i < 4; i++) {
                int dx = poll.x + dis[i][0];
                int dy = poll.y + dis[i][1];
                if (dx >= 0 && dx <= w && dy >= 0 && dy <= h && dis(node.x, node.y, dx, dy) <= r && !vis[dx][dy]) {
                    vis[dx][dy] = true;
                    deque.addLast(new Node(dx, dy));
                    count++;
                }
            }
        }
    }

    static double dis(int x1, int y1, int x2, int y2) {
        int dis = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
        return Math.sqrt(dis);
    }

    static class Node {
        int x;
        int y;

        public Node(int x, int y) {
            this.x = x;
            this.y = y;
        }
    }
}





4).总结


八 . 清理水草

在这里插入图片描述
问题描述
  小蓝有一个 n * m 大小的矩形水域,小蓝将这个水域划分为 n 行 m 列,行数从 1 到 n 标号,列数从 1 到 m 标号。每行和每列的宽度都是单位 1 。
  现在,这个水域长满了水草,小蓝要清理水草。
  每次,小蓝可以清理一块矩形的区域,从第 r1 行(含)到第 r2 行(含)的第 c1 列(含)到 c2 列(含)。
  经过一段时间清理后,请问还有多少地方没有被清理过。
输入格式
  输入第一行包含两个整数 n, m,用一个空格分隔。
  第二行包含一个整数 t ,表示清理的次数。
  接下来 t 行,每行四个整数 r1, c1, r2, c2,相邻整数之间用一个空格分隔,表示一次清理。请注意输入的顺序。
输出格式
  输出一行包含一个整数,表示没有被清理过的面积。
样例输入
2 3
2
1 1 1 3
1 2 2 2
样例输出
2
样例输入
30 20
2
5 5 10 15
6 7 15 9
样例输出
519
评测用例规模与约定
对于所有评测用例,1 <= r1 <= r2 <= n <= 100, 1 <= c1 <= c2 <= m <= 100, 0 <= t <= 100。

1) .算法思路


2).算法步骤


3). 代码实例

package LanQiaoTest.枚举;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class 清理水草 {
    static int n, m, t;
    static int[][] map;
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    public static void main(String[] args) throws IOException {
        String[] s = br.readLine().split(" ");
        n = Integer.parseInt(s[0]);
        m = Integer.parseInt(s[1]);
        map = new int[n][m];

        t = Integer.parseInt(br.readLine());
        for (int i = 0; i < t; i++) {
            String[] temp = br.readLine().split(" ");
            int r1 = Integer.parseInt(temp[0]);
            int c1 = Integer.parseInt(temp[1]);
            int r2 = Integer.parseInt(temp[2]);
            int c2 = Integer.parseInt(temp[3]);
            for (int j = r1 - 1; j <= r2 - 1; j++) {
                Arrays.fill(map[j], c1 - 1, c2, 1);
            }
        }
        int count = 0;
        for (int[] ints : map) {
            for (int anInt : ints) {
                if (anInt == 0) {
                    count++;
                }
            }
        }
        System.out.println(count);

    }
}





4).总结


九 .最大滑行距离

在这里插入图片描述
问题描述
  小蓝准备在一个空旷的场地里面滑行,这个场地的高度不一,小蓝用一个 n 行 m 列的矩阵来表示场地,矩阵中的数值表示场地的高度。
  如果小蓝在某个位置,而他上、下、左、右中有一个位置的高度(严格)低于当前的高度,小蓝就可以滑过去,滑动距离为 1 。
  如果小蓝在某个位置,而他上、下、左、右中所有位置的高度都大于等于当前的高度,小蓝的滑行就结束了。
  小蓝不能滑出矩阵所表示的场地。
  小蓝可以任意选择一个位置开始滑行,请问小蓝最多能滑行多远距离。
输入格式
  输入第一行包含两个整数 n, m,用一个空格分隔。
  接下来 n 行,每行包含 m 个整数,相邻整数之间用一个空格分隔,依次表示每个位置的高度。
输出格式
  输出一行包含一个整数,表示答案。
样例输入
4 5
1 4 6 3 1
11 8 7 3 1
9 4 5 2 1
1 3 2 2 1
样例输出
7
样例说明
  滑行的位置一次为 (2, 1), (2, 2), (2, 3), (3, 3), (3, 2), (4, 2), (4, 3)。 评测用例规模与约定
  对于 30% 评测用例,1 <= n <= 20,1 <= m <= 20,0 <= 高度 <= 100。
  对于所有评测用例,1 <= n <= 100,1 <= m <= 100,0 <= 高度 <= 10000。

1) .算法思路


2).算法步骤


3). 代码实例

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    static int[] dx = {0, 0, 1, -1};
    static int[] dy = {1, -1, 0, 0};
    static int max;
    //用不到标记数组

    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String[] strings = in.readLine().split(" ");
        int n = Integer.parseInt(strings[0]);
        int m = Integer.parseInt(strings[1]);
        int[][] G = new int[n + 1][m + 1];
        //接收数据
        for (int i = 1; i <= n; i++) {
            strings = in.readLine().split(" ");
            for (int j = 1; j <= m; j++) {
                G[i][j] = Integer.parseInt(strings[j - 1]);
            }
        }
        //遍历矩阵
        int ans = 0;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                max = 0;
                dfs(n, m, i, j, 1, G);
                ans = Math.max(ans, max);
            }
        }
        System.out.println(ans);
    }

    private static void dfs(int n, int m, int x, int y, int step, int[][] G) {
        for (int i = 0; i < 4; i++) {
            int newx = x + dx[i];
            int newy = y + dy[i];
            if (newx >= 1 && newx <= n && newy >= 1 && newy <= m && G[newx][newy] < G[x][y]) {
                step++;
                max = Math.max(max, step);
                dfs(n, m, newx, newy, step, G);
                step--;
            }
        }
    }
}


4).总结


十 .序列最小值

在这里插入图片描述

问题描述
  小蓝有一个序列 a[1], a[2], ..., a[n]。
  给定一个正整数 k,请问对于每一个 1 到 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
5 2 7 4 3
1
样例输出
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。

1) .算法思路


2).算法步骤


3). 代码实例

import java.util.*;

public class Main {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] a = new int[n];
        for(int i = 0; i < n; i++) a[i] = scanner.nextInt();
        int k = scanner.nextInt();
        int[] q1 = new int[n];
        int[] q2 = new int[n];
        int[] res = new int[n];
        int hh = 0, tt = -1;
        for(int i = 0; i < n; i++){
            if(hh <= tt && q1[hh] < i - k) hh++;
            while(hh <= tt && a[q1[tt]] >= a[i]) tt--;
            q1[++tt] = i;
            res[i] = a[q1[hh]];
        }
        hh = 0;
        tt = -1;
        for(int i = n - 1; i >= 0; i--){
            if(hh <= tt && q2[hh] > i + k) hh++;
            while(hh <= tt && a[q2[tt]] >= a[i]) tt--;
            q2[++tt] = i;
            res[i] = Math.min(res[i], a[q2[hh]]);
        }
        for(int i = 0; i < n; i++){
            System.out.print(res[i] + " ");
        }
    }
}


4).总结


十一 .数位和最小

在这里插入图片描述
问题描述
  一个数的数位和是指这个数各个数位上的数字之和。例如 2023 的数位和是 2+0+2+3=7 。
  对于以下这些数(8行,每行8个,共64个),请问数位和最小的数是多少?(如果有多个,请回答出现最早的那个)
  454771 329157 801601 580793 755604 931703 529875 361797
  604358 529564 574776 821517 195563 688516 223321 607845
  284772 603562 543328 707484 533688 380468 233733 257995
  896582 670074 912386 702393 722092 834842 126346 606526
  376981 910643 413754 945725 817853 651778 350775 676550
  316935 487808 939526 900568 423326 298936 927671 539773
  136326 717022 886675 466684 436470 558644 267231 902422
  743580 857864 529622 320921 595409 486860 951114 558787

1) .算法思路


2).算法步骤


3). 代码实例

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        int[][] G = new int[8][8];
        String[] s;
        //接受数据
        int answer = 0;
        int min = Integer.MAX_VALUE;
        for (int i = 0; i < 8; i++) {
            s = in.readLine().split(" ");
            for (int j = 0; j < 8; j++) {
                G[i][j] = Integer.parseInt(s[j]);
                int a = G[i][j];
                int sum = 0;
                while (a > 0) {
                    sum += a % 10;
                    a /= 10;
                }
                if (sum < min) {
                    min = sum;
                    answer = G[i][j];
                }
            }
        }
        System.out.println(answer);
    }
}

4).总结

  • 答案:223321

十二 .对折绳子

在这里插入图片描述

问题描述
  小蓝有一根长度为 L 的绳子,每对折一次,长度变为原来的一半,请问对折多少次后长度不超过 1 。
  例如,当 L=6 时,对折一次长度为 3,对折两次长度为 1.5 ,对折 3 次长度为 0.75,所以 3 次后长度不超过 1 。
输入格式
  输入一行包含一个整数 L 。
输出格式
  输出一行包含一个整数,表示答案。
样例输入
6
样例输出
3
样例输入
255
样例输出
8
样例输入
256
样例输出
8
样例输入
257
样例输出
9
评测用例规模与约定
  对于 50% 评测用例,1 < L <= 10**9 (10的9次方)。
  对于所有评测用例,1 < L <= 10**18 (10的18次方)。

1) .算法思路


2).算法步骤


3). 代码实例

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Double L = scanner.nextDouble();
        long ans = 0;
        while (true) {
            L /= 2;
            ans++;
            if (L < 1 )break;
        }
        System.out.println(ans);
    }
}

4).总结


十三 .删除字符

在这里插入图片描述

问题描述
  给定一个由大写字母组成的长度为 n 的字符串,请在字符串中删除 m 个字符,使得剩下的字符串的字典序最小。
输入格式
  输入的第一行包含两个整数 n, m ,用一个空格分隔。
  第二行包含一个长度为 n 的字符串。
输出格式
  输出一行包含一个长为 n-m 的字符串,表示答案。
样例输入
7 3
LANQIAO
样例输出
AIAO
评测用例规模与约定
  对于 30% 的评测用例,1 <= m < n <= 30。
  对于 60% 的评测用例,1 <= m < n <= 1000。

1) .算法思路


2).算法步骤


3). 代码实例

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        String str = scanner.next();

        StringBuilder result = new StringBuilder();
        int deleteCount = 0;

        for (int i = 0; i < n; i++) {
            char c = str.charAt(i);

            while (deleteCount < m && result.length() > 0 && result.charAt(result.length() - 1) > c) {
                result.deleteCharAt(result.length() - 1);
                deleteCount++;
            }

            result.append(c);
        }

        if (deleteCount < m) {
            result.delete(result.length() - (m - deleteCount), result.length());
        }

        System.out.println(result.toString());
    }
}


4).总结


以上只是我个人的思路及代码,可能存在错误,大家如果有发现错误的,可以在下面评论区中指出,感谢观看~💪💪💪。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1182596.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Educational Codeforces Round 12 C 字符串和dp

Educational Codeforces Round 12 C zscoder喜欢简单字符串&#xff01;如果每一对相邻字符都是不同的&#xff0c;则称为简单字符串 t 。例如&#xff0c;ab, aba, zscoder 是简单字符串&#xff0c;而 aa, add 则不简单。 zscoder 给出了一个字符串 s 。他想更改最少的字符…

shell脚本的awk续篇(粗糙版)

sleep 30 #这是睡眠时间 awk的精确筛选&#xff1a; $n{><}:对比数值 $n-"字符串"代表第n个字段包含某个字符串 $n!-"字符串"代表第n个字段不包含某个字符串 $n"字符串" 代表第n个字段为某个字符串 $n!"字符串"代表第n个字…

【教3妹学编程-算法题】2924. 找到冠军 II

3妹&#xff1a;2哥快看&#xff0c;我黑龙江的闺蜜给我发了一个她在打雪仗的视频&#xff0c;好大的雪啊&#xff0c;好欢乐。 2哥&#xff1a;什么&#xff0c;东北不是暴雪吗&#xff0c; 还可以打雪仗。 3妹 :是啊&#xff0c;可是雪停了就可以打雪仗了啊。 2哥&#xff1a…

Netty入门指南之NIO Channel详解

作者简介&#xff1a;☕️大家好&#xff0c;我是Aomsir&#xff0c;一个爱折腾的开发者&#xff01; 个人主页&#xff1a;Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏&#xff1a;Netty应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言Channe…

【1107】

interface是面向对象编程语言中接口操作的关键字&#xff0c;功能是把所需成员组合起来&#xff0c;用来封装一定功能的集合。 它好比一个模板&#xff0c;在其中定义了对象必须实现的成员&#xff0c;通过类或结构来实现它。 接口不能直接实例化&#xff0c;即ICount icnew iC…

回归模型原理总结及代码实现

前言 本文将介绍回归模型算法&#xff0c;并总结了一些常用的除线性回归模型之外的模型&#xff0c;其中包括一些单模型及集成学习器。 保序回归、多项式回归、多输出回归、多输出K近邻回归、决策树回归、多输出决策树回归、AdaBoost回归、梯度提升决策树回归、人工神经网络、…

openGauss Meetup(合肥站)精彩回顾 | openGauss合肥用户组正式成立

由openGauss社区、天津南大通用数据技术股份有限公司联合主办的“openGauss Meetup • 合肥站”已于11月4日落下帷幕&#xff0c;此次活动邀请到数据库行业专家与行业同仁共同探讨数据库技术发展创新、数据库产业发展与落地、数据库周边工具构建、生态共建等内容&#xff0c;推…

IDEA项目下不显示target目录或者target目录不完整没有新添加的资源,idea隐藏target目录

文章目录 一、前言二、idea隐藏target目录2.1、idea隐藏target目录2.2、git提交时隐藏target目录 三、idea下显示target目录3.1、解决idea下不显示target目录问题3.2、target显示目录不完整 一、前言 在idea-2020.1.4版本下讲解idea怎么显示或隐藏target目录。 需要知道:如果…

执行mysql-community-libs-8.1.0-1.el8.x86_64.rpm报错依赖检测失败

目录 1.错误信息 2.解决方法 1.错误信息 我是在VMware虚拟机18上的Centos8上的&#xff0c;安装MySQL8.1.0&#xff0c;执行mysql-community-libs-8.1.0-1.el8.x86_64.rpm报错 [rootlocalhost mysql8.1.0]# rpm -ivh mysql-community-libs-8.1.0-1.el8.x86_64.rpm 警告&…

rvt文件发三维服务

一、所需工具 SuperMap iDesktop、Revit、SuperMap-Revit插件、SuperMap iServer。 二、操作流程 BIM数据发三维服务&#xff1a; 1、Revit中打开BIM数据&#xff0c;附加模块—UDB SuperMap Export。 2、打开SuperMap IDesktop&#xff0c;数据源—打开文件型数据源&…

Java入门篇 之 类与对象

本篇碎碎念&#xff1a;博主作为一个三本学生&#xff0c;庆幸自己上了个本科&#xff0c;但是在支付高昂学费的时候认识到&#xff0c;自己要好好学习&#xff0c;不好好学习&#xff0c;难道以后给人端盘子咩&#xff1b;无论是专科还是本科&#xff0c;都不可以自暴自弃&…

洛谷P2196 [NOIP1996 提高组] 挖地雷【动态规划思路分析】看完直接举一反三!

P2196 [NOIP1996 提高组] 挖地雷 前言题目题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 题目分析注意事项 代码后话额外测试用例样例输入 #2样例输出 #2 王婆卖瓜 题目来源 前言 我发现我是天才&#xff0c;只做了三道动态规划的类型题就感觉我已经炉火纯青了。大…

如何实现生产质量精细化管理?

导 读 ( 文/ 1528 ) 在现代制造业中&#xff0c;实现生产质量的精细化管理对企业的竞争力至关重要。本文将介绍三个关键步骤&#xff0c;包括建立全面质量管理体系、采用数据驱动的质量监控和实时反馈机制&#xff0c;以及持续改进和员工培训&#xff0c;帮助企业实现生产质量的…

[答疑]大老二和德州扑克-属性值没变,状态怎么变了

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 邬俊杰 2023-10-31 21:20 课上说状态是由属性值决定的&#xff0c;比如身高>170算高&#xff0c;某人身高175&#xff0c;算高。如果规则改了&#xff0c;身高>180算高&#xf…

即插即用篇 | YOLOv8 引入Super Token Sampling ViT | 《CVPR 2023 最新论文》

论文地址:https://arxiv.org/abs/2211.11167 代码地址:https://github.com/hhb072/STViT 视觉变换器已经在许多视觉任务中取得了令人印象深刻的性能。然而,它在捕捉浅层的局部特征时可能会受到高度冗余的影响。因此,引入了局部自注意力或早期卷积,这些方法牺牲了捕捉长距…

生产问题分析:批量执行慢,根据日志进行分析。

1.首先拿到日志&#xff0c;查看批量执行的时间段为36:58-42:24 2.截取时间段为36:58-42:24的日志内容。 3.从该批量的第一个代码看起&#xff0c;sql会打印在日志里&#xff0c;查找第一个sql&#xff0c;对照代码一个个看下去。 4.发现两个sql执行的时间间隔特别长&#xff1…

云尘 命令执行系列

第一题 system <?php include "flag.php";if (isset($_POST[cmd])) {system($_POST[cmd]); }show_source(__FILE__);代码如上 system($_POST[cmd]); POST请求发送一个名为 cmd 的参数&#xff0c;然后将该参数的值传递给系统命令执行函数 system()&#xff0c…

高并发下Redis缓存与数据库双写一致性问题原理分析和解决方案

目录 一、什么是缓存与数据库双写不一致性二、常见保证高并发下双写一致性方案2.1、延迟双删&#xff08;不可靠&#xff09;2.2、分布式读写锁&#xff08;可靠&#xff09;2.3、MQ异步消费&#xff08;不可靠&#xff09;2.4、订阅数据库变更日志&#xff08;不可靠&#xff…

2023年十大地推拉新接单平台和网推接单平台,都是一手单

2023年做拉新推广的地推人员&#xff0c;一定不要错过这十个接单平台&#xff0c;助你轻松找到一手单&#xff0c;这10个平台分别是&#xff1a; 主推&#xff1a;“聚量推客” 一手官签接单平台 一手官方邀请码 000000 1. 聚量推客&#xff1a; “聚量推客”汇聚了众多市场…

怎样选择适合自己的ITSM软件?

市场上ITSM解决方案琳琅满目&#xff0c;每种解决方案都有其优点和缺点。这使选择决策过程变得复杂&#xff0c;当组织机构决定投资ITSM软件时&#xff0c;很难如愿选择到一款最适合自己的帮助台软件。 而小编有一套系统的决策方法&#xff0c;可以帮助您简化评估过程&#xff…