机试题——新能源汽车充电桩建设策略

题目描述

随着新能源汽车的蓬勃发展,新能源汽车充电桩的覆盖密度越来越重要。某汽车公司建设充电桩的思路如下:

  • 一条高速沿线,每个区域建设一个充电站,充电站内有多个充电桩,充电站之间保持合理的距离。
  • 每个充电站可以覆盖相邻范围的多个区域。
  • 使用n表示充电站的数目,使用station[i]数组表示第i个充电站中充电桩的数目。
  • 给定一个范围r,表示每个充电站可以覆盖的相邻区域范围(|i - j| <= r0 <= i, j <= n - 1)。
  • 汽车公司打算在一些城市新增k个充电桩,如何分配这k个充电桩给充电站,使得所有区域中,被充电桩覆盖最少的区域的充电桩数目最大化。

输入描述

  1. 第一行:一个整数n,表示充电站的数目(0 <= n <= 100000)。
  2. 第二行:n个整数,表示每个充电站中充电桩的数目(0 <= station[i] <= 100000)。
  3. 第三行:一个整数r,表示充电站可覆盖的相邻区域范围(0 <= r <= n - 1)。
  4. 第四行:一个整数k,表示需要新增的充电桩数目(0 <= k <= 1000000000)。

输出描述

一个整数,表示被充电桩覆盖最少的区域的充电桩数目。

用例输入

5
1 2 4 5 0
1
2
5

最优方案是把2个充电桩都放在充电站1,这样每个充电站的充电桩数目分别为1 4 4 5 0
区域0的覆盖充电桩为1 + 4 = 5,区域1为1 + 4 + 4 = 9,区域2为4 + 4 + 5 = 13,区域3为5 + 4 = 9,区域4为5 + 0 = 5
充电桩覆盖数目最少是5,无法得到更优解,因此返回5

4
4 4 4 4
0
2
4

无论怎么分配新增的3个充电桩,总有一个区域的充电桩覆盖数目是4

解题思路

  1. 问题建模

    • 该问题可以看作是一个二分查找问题,目标是最大化所有区域中覆盖最少的充电桩数目。
    • 使用差分数组预处理每个区域的充电桩覆盖情况,然后通过二分查找确定最优的覆盖数目。
  2. 差分数组预处理

    • 使用差分数组dk来预处理每个区域的充电桩覆盖情况,减少计算复杂度。
    • 对于每个充电站i,更新差分数组dk,使得dk[i - r] += station[i]dk[i + r + 1] -= station[i]
  3. 二分查找

    • 使用二分查找确定最优的覆盖数目target
    • 对于每个target,检查是否可以通过分配k个充电桩使得所有区域的覆盖数目都达到target
    • 如果可以,则尝试更大的target;否则,尝试更小的target
  4. 贪心分配

    • 在检查过程中,如果某个区域的覆盖数目不足target,则分配足够的充电桩,并更新差分数组。尽可能的往右边覆盖,也就是min(n, i + 2 * r+1)

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
#include<algorithm>
#include<string>
#include<vector>
#include<unordered_map>
#include<unordered_set>
#include<queue>
#include<set>
#include<list>
#include<sstream>
#include<bitset>
#include<stack>
#include<climits>
using namespace std;

int n, r, k;

bool check(vector<long long> dk, long long target) {
    long long tk = k; // 剩余可分配的充电桩
    long long cur = 0; // 当前区域的覆盖充电桩数目
    for (int i = 0; i < n; i++) {
        cur += dk[i]; // 更新当前区域的覆盖充电桩数目
        if (cur < target) { // 如果当前区域不足target
            tk -= (target - cur); // 分配充电桩
            dk[min(n, i + 2 * r + 1)] -= (target - cur); // 更新差分数组
            cur = target; // 当前区域覆盖数目达到target
        }
    }
    return tk >= 0; // 如果分配完成,则返回true
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> n;
    vector<long long> station(n);
    for (int i = 0; i < n; i++) {
        cin >> station[i];
    }
    cin >> r >> k;

    // 差分数组预处理
    vector<long long> dk(n + 1, 0);
    for (int i = 0; i < n; i++) {
        dk[max(0, i - r)] += station[i];
        dk[min(n, i + r + 1)] -= station[i];
    }

    // 二分查找最优解
    long long l = 0, r = 2e10;
    long long res = 0;
    while (l <= r) {
        long long mid = (l + r) / 2;
        if (check(dk, mid)) {
            l = mid + 1;
            res = mid;
        } else {
            r = mid - 1;
        }
    }
    cout << res;
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【ARM】MDK如何生成指定大小的bin文件,并指定空区域的填充数据

1、 文档目标 解决MDK如何生成指定大小的bin文件&#xff0c;并指定空区域的填充数据 2、 问题场景 客户有这样的需求&#xff0c;客户本身的工程编译生成bin文件后&#xff0c;bin文件大小为200k。整体芯片的内存有512k。客户想要最终生成的bin文件可以达到512k的一个情况&a…

Linux-----进程间通信

一、按通信范围分类 同一主机进程通信 传统IPC方式&#xff1a; 管道&#xff08;无名管道、有名管道&#xff09;信号&#xff08;Signal&#xff09; System V IPC&#xff1a; 共享内存&#xff08;效率最高&#xff09;消息队列信号量 POSIX IPC&#xff08;较新标准&#…

Part 3 第十二章 单元测试 Unit Testing

概述 第十二章围绕单元测试展开&#xff0c;阐述了单元测试的实践与重要性&#xff0c;通过对比其他测试类型&#xff0c;突出其特点&#xff0c;还介绍了单元测试的最佳实践、避免的反模式以及与测试替身相关的内容&#xff0c;为编写高质量单元测试提供指导。 章节概要 1…

Windows10配置C++版本的Kafka,并进行发布和订阅测试

配置的环境为&#xff1a;Release x64下的环境 完整项目&#xff1a;https://gitee.com/jiajingong/kafka-publisher 1、首先下载相应的库文件&#xff08;.lib&#xff0c;.dll&#xff09; 参考链接&#xff1a; GitHub - eStreamSoftware/delphi-kafka GitHub - cloade…

Deepseek引爆AI热潮 防静电地板如何守护数据中心安全

近期&#xff0c;Deepseek的爆火将人工智能推向了新的高度&#xff0c;也引发了人们对AI背后基础设施的关注。作为AI运行的“大脑”&#xff0c;数据中心承载着海量数据的存储、处理和传输&#xff0c;其安全稳定运行至关重要。而在这背后&#xff0c;防静电地板扮演着不可或缺…

Spring框架基本使用(Maven详解)

前言&#xff1a; 当我们创建项目的时候&#xff0c;第一步少不了搭建环境的相关准备工作。 那么如果想让我们的项目做起来方便快捷&#xff0c;应该引入更多的管理工具&#xff0c;帮我们管理。 Maven的出现帮我们大大解决了管理的难题&#xff01;&#xff01; Maven&#xf…

QSplashScreen --软件启动前的交互

目录 QSplashScreen 类介绍 使用方式 项目中使用 THPrinterSplashScreen头文件 THPrinterSplashScreen实现代码 使用代码 使用效果 QSplashScreen 类介绍 QSplashScreen 是 Qt 中的一个类&#xff0c;用于显示启动画面。它通常在应用程序启动时显示&#xff0c;以向用户显…

【Vscode 使用】集合1

一、使用make工具管理工程 windows下&#xff0c;下载mingw64&#xff0c;配置好mingw64\bin 为 Win10系统全局变量后。 在mingw64/bin目录下找到mingw32-make.exe工具。复制一份改名为&#xff1a;make.exe&#xff0c;没错&#xff0c;就是那么简单&#xff0c;mingw64自带m…

PHP-create_function

[题目信息]&#xff1a; 题目名称题目难度PHP-create_function2 [题目考点]&#xff1a; create_function ( string args , string args , string code )[Flag格式]: SangFor{wWx5dEGHHhDUwmST4bpXwfjSzq43I6cz}[环境部署]&#xff1a; docker-compose.yml文件或者docker …

golang内存泄漏

golang也用了好几年了&#xff0c;趁着有空 整理归纳下&#xff0c;以后忘了好看下 一般认为 Go 10次内存泄漏&#xff0c;8次goroutine泄漏&#xff0c;1次是真正内存泄漏&#xff0c;还有1次是cgo导致的内存泄漏 1:环境 go1.20 win10 2:goroutine泄漏 单个Goroutine占用内存&…

Python Seaborn库使用指南:从入门到精通

1. 引言 Seaborn 是基于 Matplotlib 的高级数据可视化库,专为统计图表设计。它提供了更简洁的 API 和更美观的默认样式,能够轻松生成复杂的统计图表。Seaborn 在数据分析、机器学习和科学计算领域中被广泛使用。 本文将详细介绍 Seaborn 的基本概念、常用功能以及高级用法,…

修改与 Git 相关的邮箱

要修改与 Git 相关的邮箱信息&#xff0c;需要区分以下两种情况&#xff1a; 1. 修改 Git 提交时使用的邮箱&#xff08;影响提交记录&#xff09; Git 提交记录中的邮箱由本地 Git 配置的 user.email 决定&#xff0c;与 SSH 密钥无关。修改方法如下&#xff1a; 全局修改&a…

用PyTorch从零构建 DeepSeek R1:模型架构和分步训练详解

DeepSeek R1 的完整训练流程核心在于&#xff0c;在其基础模型 DeepSeek V3 之上&#xff0c;运用了多种强化学习策略。 本文将从一个可本地运行的基础模型起步&#xff0c;并参照其技术报告&#xff0c;完全从零开始构建 DeepSeek R1&#xff0c;理论结合实践&#xff0c;逐步…

基于SpringBoot的“流浪动物救助系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“流浪动物救助系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 局部E-R图 系统首页界面 系统…

从零开始玩转TensorFlow:小明的机器学习故事 5

图像识别的挑战 1 故事引入&#xff1a;小明的“图像识别”大赛 小明从学校里听说了一个有趣的比赛&#xff1a;“美食图像识别”。参赛者需要训练计算机&#xff0c;看一张食物照片&#xff08;例如披萨、苹果、汉堡等&#xff09;&#xff0c;就能猜出这是什么食物。听起来…

学习笔记--电磁兼容性EMC

一、基本概念 电磁兼容性&#xff08;Electromagnetic Compatibility&#xff0c;EMC&#xff09;是电子电气设备在特定电磁环境中正常工作的能力&#xff0c;同时不会对其他设备产生不可接受的电磁干扰。其核心目标是确保设备在共享的电磁环境中既能抵抗干扰&#xff0c;又能避…

unity学习51:所有UI的父物体:canvas画布

目录 1 下载资源 1.1 在window / Asset store下下载一套免费的UI资源 1.2 下载&#xff0c;导入import 1.3 导入后在 project / Asset下面可以看到 2 画布canvas&#xff0c;UI的父物体 2.1 创建canvas 2.1.1 画布的下面是 event system是UI相关的事件系统 2.2 canvas…

ArcGIS Pro中创建最低成本路径的详尽教程

一、引言 在地理信息系统&#xff08;GIS&#xff09;的应用场景中&#xff0c;路径分析扮演着至关重要的角色。而最低成本路径分析&#xff0c;则是路径分析中的一种高级应用&#xff0c;它综合考虑了地形、植被、土地利用类型等多种因素&#xff0c;通过加权计算得出一条从起…

地铁站内导航系统:基于蓝牙Beacon与AR技术的动态路径规划技术深度剖析

本文旨在分享一套地铁站内导航系统技术方案&#xff0c;通过蓝牙Beacon技术与AI算法的结合&#xff0c;解决传统导航定位不准确、路径规划不合理等问题&#xff0c;提升乘客出行体验&#xff0c;同时为地铁运营商提供数据支持与增值服务。 如需获取校地铁站内智能导航系统方案文…

在VSCode中接入deepseek

注册就送14元2000万tokens。 https://cloud.siliconflow.cn/i/rnbA6i6U各种大模型 下面介绍我是如如接入vscode的 左边生成一个key&#xff0c;呆会vscode要用&#xff0c;不然401. 打开vscod&#xff0c;电脑能上网。下插件。 下好要配置 点它一下。 要配置&#xff0c;全…