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

大家好,我是snippet,今天是我们刷题的第二十八天,距离我们刷题活动结束也就只有几天了,最近刷题有点迷茫了,下面是我今天的题解

目录

一、路标设置

题目链接:P3853 [TJOI2007]路标设置 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目内容:

解题思路:

代码:


一、路标设置

题目链接:P3853 [TJOI2007]路标设置 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目内容:

题目背景

B 市和 T 市之间有一条长长的高速公路,这条公路的某些地方设有路标,但是大家都感觉路标设得太少了,相邻两个路标之间往往隔着相当长的一段距离。为了便于研究这个问题,我们把公路上相邻路标的最大距离定义为该公路的“空旷指数”。

题目描述

现在政府决定在公路上增设一些路标,使得公路的“空旷指数”最小。他们请求你设计一个程序计算能达到的最小值是多少。请注意,公路的起点和终点保证已设有路标,公路的长度为整数,并且原有路标和新设路标都必须距起点整数个单位距离。

输入格式

第 11 行包括三个数 �,�,�L,N,K,分别表示公路的长度,原有路标的数量,以及最多可增设的路标数量。

第 22 行包括递增排列的 �N 个整数,分别表示原有的 �N 个路标的位置。路标的位置用距起点的距离表示,且一定位于区间 [0,�][0,L] 内。

输出格式

输出 11 行,包含一个整数,表示增设路标后能达到的最小“空旷指数”值。

输入输出样例

输入 #1复制

101 2 1

0 101

输出 #1复制

51

说明/提示

公路原来只在起点和终点处有两个路标,现在允许新增一个路标,应该把新路标设在距起点 5050 或 5151 个单位距离处,这样能达到最小的空旷指数 5151。

50%50% 的数据中,2≤�≤1002≤N≤100,0≤�≤1000≤K≤100。

100%100% 的数据中,2≤�≤1000002≤N≤100000, 0≤�≤1000000≤K≤100000。

100%100% 的数据中,0<�≤100000000<L≤10000000。

解题思路:

代码:

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

import java.io.*;

/**
 * @author snippet
 * @data 2023-03-31
 * 路标设置-洛谷
 */
// 二分
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 l, n, k;
    static int N = 100010;
    static int[] a = new int[N];

    public static boolean check(int x) {
        int cnt = k, pre = 0;
        for (int i = 1; i <= n; i++) {
            if (cnt < 0) return false;
            if (a[i] - pre <= x) {
                pre = a[i];
                continue;
            }
            pre += x;
            i--;
            cnt--;
        }
        return cnt >= 0;
    }

    public static void main(String[] args) throws Exception {
        String[] s = br.readLine().split(" ");
        l = Integer.parseInt(s[0]);
        n = Integer.parseInt(s[1]);
        k = Integer.parseInt(s[2]);

        s = br.readLine().split(" ");
        for (int i = 1; i <= n; i++) {
            a[i] = Integer.parseInt(s[i - 1]);
        }

        int left = 0;
        int right = 10000000;
        while (left < right) {
            int mid = left + ((right - left) >> 1);
            if (check(mid)) {
                right = mid;
            } else {
                left = mid + 1;
            }
        }
        pw.println(left);
        pw.flush();
        br.close();
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值