当前位置: 首页 > news >正文

【蓝桥杯真题】2026/4/7【前缀和】

image

image

需要注意的点:
1.步数的意思是什么
2.起点从0开始
3.矿洞矿的数量可以不一样
利用前缀和+二分


import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int[] nums = new int[n];//用来存每个矿洞里有多少个矿,比如 输入 -3 -3 则代表-3矿洞有两个矿,用于计算出前缀和HashMap<Integer, Integer> map = new HashMap<>();//这一步开始预处理map,保存每个矿洞有多少个矿for (int i = 0; i < n; i++) {nums[i] = sc.nextInt();map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);}//排序,因为题意表示是从0开始可以走m步Arrays.sort(nums);// 去重,保证计算前缀和时,不会重复添加矿石List<Integer> list = new ArrayList<>();for (int i = 0; i < nums.length; i++) {if (i == 0 || nums[i] != nums[i - 1]) {list.add(nums[i]);}}// 强制添加0,保证起点存在(解决无0崩溃)if (!list.contains(0)) {list.add(0);Collections.sort(list); // 重新排序}int size = list.size();long[] pre = new long[size + 1];//pos0表示0所在数组的位置int pos0 = -1;for (int i = 0; i < size; i++) {//pre[i]代表第i个数,pre[1]计算的就是一个数的前缀和nums[0]pre[i + 1] = pre[i] + map.getOrDefault(list.get(i), 0);if (list.get(i) == 0) pos0 = i;}long maxAns = 0;// 1. 只向右走,注意步数到底是什么,比如list.get(2)=3,意味着要走三步for (int i = pos0; i < size; i++) {if (list.get(i) > m) break;maxAns = Math.max(maxAns, pre[i + 1] - pre[pos0]);}// 2. 只向左走,注意步数到底是什么,比如list.get(2)=-4,意味着要走四步for (int i = pos0; i >= 0; i--) {if (Math.abs(list.get(i)) > m) break;maxAns = Math.max(maxAns, pre[pos0 + 1] - pre[i]);}// 3. 先左 → 折返 → 右(修复二分边界)for (int i = 0; i < pos0; i++) {int cost = 2 * Math.abs(list.get(i));if (cost > m) continue;int remain = m - cost;int l = pos0, r = size - 1, right = pos0;while (l <= r) {int mid = (l + r) / 2;if (list.get(mid) <= remain) {right = mid;l = mid + 1;} else r = mid - 1;}maxAns = Math.max(maxAns, pre[right + 1] - pre[i]);}// 4. 先右 → 折返 → 左for (int i = pos0 + 1; i < size; i++) {int cost = 2 * list.get(i);if (cost > m) break;int remain = m - cost;int l = 0, r = pos0, left = pos0;while (l <= r) {int mid = (l + r) / 2;// 修复:这里之前逻辑颠倒,现在精准找最远左边界if (Math.abs(list.get(mid)) <= remain) {left = mid;r = mid - 1;} else {l = mid + 1;}}maxAns = Math.max(maxAns, pre[i + 1] - pre[left]);}System.out.println(maxAns);}
}
http://www.jsqmd.com/news/603447/

相关文章:

  • 基于IEEE33节点的节点碳势计算与可视化 摘要:代码主要是基于IEEE33节点这个标准算例
  • 2026甘肃施工总承包资质代办行业观察:合规、本地化与效率定义下的服务商优选 - 深度智识库
  • 猫抓:高效全平台网页资源嗅探与下载解决方案
  • 叶凡同学结局揭秘
  • 如何解决百度网盘提取码获取难题:baidupankey工具全解析
  • C++ 拷贝构造函数深度解析:从浅拷贝到深拷贝
  • 英语考试词汇—计算机等级考试—软件设计师考前备忘录—东方仙盟
  • 3月必看:空调机组厂家口碑推荐新鲜出炉!新风机组/散热器/翅片管/干冷器/表冷器/工业暖风机,空调机组厂家口碑推荐 - 品牌推荐师
  • 2026 年甘肃施工总承包资质代办机构甄选指南 靠谱可靠实力强服务适配全场景 - 深度智识库
  • 终极指南:5分钟快速实现Arduino设备无缝接入Home Assistant的完整教程
  • Java 线上 CPU 100%,大部分人第一步就走错了方向
  • HEOI 游玩玄学记
  • 2026年西安专业空调回收厂家推荐:废旧中央空调/商用机组/家用电器环保处置优选 - 品牌推荐官
  • 系统维护自动化革新:WinUtil一站式解决方案提升效率80%的实践指南
  • 高级感设计:核心要素与实现路径
  • 行业内GEO优化服务哪家可靠
  • 2026 年甘肃专业承包资质代办服务机构甄选 高口碑合规机构全梳理 - 深度智识库
  • Transformer核心揭秘:通俗易懂图解,小白也能轻松入门并收藏这篇Jay Alammar的《Illustrated Transformer》
  • 我帮你测过了,测试圈排名第一的 Skill 果然牛逼
  • 背栓连接式石材幕墙施工工艺
  • 洁净车间净化厂房认证全攻略全行业一次性合规通关指南-蓝网恒星 - 深度智识库
  • Win11Debloat终极指南:3分钟彻底解决Windows卡顿与隐私泄露问题
  • 5步攻克Windows运行库部署难题:让开发者与IT管理员效率提升80%
  • 0基础新手教程:COLMAP3.8将bin转为txt再转为json文件(附代码),其它类型同理
  • 不用U盘也能重装系统?玩酷之家一键重装让你桌面秒装Windows!
  • 5个高效步骤:Win11Debloat让Windows系统卡顿彻底解决
  • windows10 休眠恢复后 系统卡顿,浏览器卡顿 解决办法
  • 2026年4月如何集成OpenClaw?云端保姆级教程:安装及大模型API、Skill集成
  • 中科院科学家研究中国光钟刷新计时极限 300亿年不差1秒
  • 全能 Markdown 在线编辑器推荐:支持微信/知乎排版、Mermaid、LaTeX,一键导出 PDF/PNG