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

文章包含了四道编程题的解答,包括ASC题目的ASCII码计算,递增三元组问题的二分查找法解决,环境治理问题的城市道路改善策略,以及小球称重问题的逻辑分析。所有题目均涉及算法和数据结构的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

目录

一、ASC

运行限制

二、递增三元组

题目描述

输入描述

输出描述

输入输出样例

运行限制

三、环境治理

问题描述

输入格式

输出格式

样例输入

样例输出

评测用例规模与约定

运行限制

四、小球称重

问题描述

输入格式

输出格式

样例输入

样例输出

样例说明

评测用例规模与约定

运行限制


一、ASC

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

题目内容:

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

已知大写字母 A 的 ASCII 码为 65,请问大写字母 L 的 ASCII 码是多少?

运行限制

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

解题思路:

这个题没有啥思路,直接输出

代码:

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

/**
 * @author snippet
 * @data 2023-03-20
 * ASC-蓝桥云课
 */
public class T1_ASC {
    public static void main(String[] args) {
        System.out.println(65 + ('L' - 'A'));
    }
}

二、递增三元组

题目链接:递增三元组 - 蓝桥云课 (lanqiao.cn)

题目内容:

题目描述

给定三个整数数组

A=[A1​,A2​,⋯AN​],

B=[B1​,B2​,⋯BN​],

C=[C1​,C2​,⋯CN​],

请你统计有多少个三元组 (i,j,k) 满足:

1.1≤i,j,k≤N;

2.Ai​<Bj​<Ck​。

输入描述

第一行包含一个整数 N。

第二行包含 N 个整数 A1​,A2​,⋯AN​。

第三行包含 N 个整数 B1​,B2​,⋯BN​。

第四行包含 N 个整数 C1​,C2​,⋯CN​。

其中,1≤N≤10^5,0≤Ai,Bi,Ci≤10^5。

输出描述

输出一个整数表示答案。

输入输出样例

示例

输入

3
1 1 1
2 2 2
3 3 3

输出

27

运行限制

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

解题思路:

因为数据范围是到10^5,所以我们不能使用三重for循环,只可以对a/b/c三个选定一个,然后对其他两个数据进行二分查找,根据(a[i]<b[j]<c[k])我们可以先给定b的位置,然后来二分查找a的位置(t)和c的位置(e),然后对答案进行求和 ans += t * (n - e + 1);

代码:

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

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

/**
 * @author snippet
 * @data 2023-03-20
 * 递增三元组-蓝桥云课
 */
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;// n表示数据的个数
    static long ans = 0;// 记得开long
    static int N = 100100;
    static int[] a = new int[N];
    static int[] b = new int[N];
    static int[] c = 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 = 1; i <= n; i++) {
            a[i] = Integer.parseInt(s[i-1]);
        }
        s = br.readLine().split(" ");
        for (int i = 1; i <= n; i++) {
            b[i] = Integer.parseInt(s[i-1]);
        }
        s = br.readLine().split(" ");
        for (int i = 1; i <= n; i++) {
            c[i] = Integer.parseInt(s[i-1]);
        }

        Arrays.sort(a,1,n+1);
        Arrays.sort(b,1,n+1);
        Arrays.sort(c,1,n+1);

        for (int i = 1; i <= n; i++) {
            // 对a进行二分找到最大的小于b[i]的a的数据的位置
            int left = 1, right = n;
            while (left < right) {
                int mid = left + right + 1 >> 1;
                if (a[mid] < b[i]) left = mid;
                else right = mid - 1;
            }
            int t = left;

            // 对c进行二分找到最小的大于b[i]的c的数据的位置
            left = 1;
            right = n;
            while (left < right) {
                int mid = left + right >> 1;
                if (b[i] < c[mid]) {
                    right = mid;
                } else {
                    left = mid + 1;
                }
            }

            if (a[t] < b[i] && c[right] > b[i]) ans += (long)t * (n - right + 1);
        }
//        for (int i = 1; i <= n; i++) {
//            System.out.println(a[i] + " " + b[i] + " " + c[i]);
//        }
        pw.println(ans);
        pw.flush();
        br.close();
    }
}

三、环境治理

题目链接:环境治理 - 蓝桥云课 (lanqiao.cn)

题目内容:

问题描述

LQ 国拥有 n 个城市, 从 0 到 n−1 编号, 这 n 个城市两两之间都有且仅有 一条双向道路连接, 这意味着任意两个城市之间都是可达的。每条道路都有一 个属性 D, 表示这条道路的灰尘度。当从一个城市 A 前往另一个城市 B 时, 可 能存在多条路线, 每条路线的灰尘度定义为这条路线所经过的所有道路的灰尘 度之和, LQ 国的人都很讨厌灰尘, 所以他们总会优先选择灰尘度最小的路线。

LQ 国很看重居民的出行环境, 他们用一个指标 P 来衡量 LQ 国的出行环 境, P 定义为:

P=i=0∑n−1​j=0∑n−1​d(i,j)

其中 d(i,j) 表示城市 i 到城市 j 之间灰尘度最小的路线对应的灰尘度的值。 为了改善出行环境, 每个城市都要有所作为, 当某个城市进行道路改善时, 会将与这个城市直接相连的所有道路的灰尘度都减少 1 , 但每条道路都有一个 灰尘度的下限值 L, 当灰尘度达到道路的下限值时, 无论再怎么改善, 道路的 灰尘度也不会再减小了。

具体的计划是这样的:

第 1 天, 0 号城市对与其直接相连的道路环境进行改善;

第 2 天, 1 号城市对与其直接相连的道路环境进行改善;

⋯⋯

第 n 天, n−1 号城市对与其直接相连的道路环境进行改善;

第 n+1 天, 0 号城市对与其直接相连的道路环境进行改善;

第 n+2 天, 1 号城市对与其直接相连的道路环境进行改善;

LQ 国想要使得 P 指标满足  P≤Q 。请问最少要经过多少天之后, P 指标 可以满足 P≤Q 。如果在初始时就已经满足条件, 则输出 0 ; 如果永远不可能 满足, 则输出 −1−1 。

输入格式

输入的第一行包含两个整数 n,Q, 用一个空格分隔, 分别表示城市个数和 期望达到的 P 指标。

接下来 n 行, 每行包含 n 个整数, 相邻两个整数之间用一个空格分隔, 其 中第 i 行第 j 列的值 Dij​(Dij​=Dji​,Dii​=0) 表示城市 i 与城市 j 之间直接相连 的那条道路的灰尘度。

接下来 n 行, 每行包含 n 个整数, 相邻两个整数之间用一个空格分隔, 其 中第 i 行第 j 列的值 Lij​(Lij​=Lji​,Lii​=0) 表示城市 i 与城市 j 之间直接相连的 那条道路的灰尘度的下限值。

输出格式

输出一行包含一个整数表示答条。

样例输入

3 10
0 2 4
2 0 1
4 1 0
0 2 2
2 0 0
2 0 0

样例输出

2

评测用例规模与约定

对于 30% 的评测用例, 1≤n≤10,0≤Lij​≤Dij​≤10 ;

对于 60% 的评测用例, 1≤n≤50,0≤Lij​≤Dij​≤100000;

对于所有评测用例, 1≤n≤100,0≤Lij​≤Dij​≤100000,0≤Q≤2^     31−1 。

运行限制

  • 最大运行时间:10s
  • 最大运行内存: 512M

解题思路:

代码:

四、小球称重

题目链接:小球称重 - 蓝桥云课 (lanqiao.cn)

题目内容:

问题描述

小蓝有 N 个小球, 编号 1 至 N 。其中 N−1 是正品, 重量相同; 有 1 个是 次品, 重量比正轻。

为了找出次品, 小蓝已经用天平进行了 M 次称重, 并且记录下来每次两边 放的小球编号, 和称重结果。

请你根据记录, 判断还剩下几个小球有次品的嫌疑。

输入格式

第一行包含 2 个整数 N 和 M 。

以下包含 M 次称重记录, 每个记录占 4 行。

第一行是一个整数 K, 表示天平两边各放了 K 个小球。

第二行包含 K 个整数, 代表放在天平左边的小球编号。

第三行包含 K 个整数, 代表放在天平右边的小球编号。

第四行是一个字符, 为 ' >> ', '<', ' == '之一。' >> ' 代表左边比右边重, '<' 代

在一次称重中保证每个小球最多出现 1 次。

输出格式

输出一个整数, 代表答案。

样例输入

10 2
3
1 2 3
4 5 6
<
2
3 7
8 9
=

样例输出

2

样例说明

1,2,3<4,5,6 能判断出次品在 1,2,3 之中。

3,7=8,9 能判断出 3 不可能是次品。

所以只剩下 1,2 可能是次品。

评测用例规模与约定

对于 40% 的数据, 1≤N≤106;

对于 100% 的数据, 1≤N≤109,1≤M≤105, 参与 M 次称重的小球总数 ≤10^6.

运行限制

  • 最大运行时间:10s
  • 最大运行内存: 512M

解题思路:

代码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值