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

蓝桥云客 挖矿

0挖矿 - 蓝桥云课


问题描述

小蓝正在数轴上挖矿,数轴上一共有 n 个矿洞,第 i 个矿洞的坐标为 ai​。小蓝从 0 出发,每次可以向左或向右移动 1 的距离,当路过一个矿洞时,就会进行挖矿作业,获得 1 单位矿石,但一个矿洞不能被多次挖掘。小蓝想知道在移动距离不超过 m 的前提下,最多能获得多少单位矿石?

输入格式

输入的第一行包含两个正整数 n,m,用一个空格分隔。
第二行包含 n 个整数 a1​,a2​,…,an​,相邻整数之间使用一个空格分隔。

输出格式

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

样例输入

5 4
0 -3 -1 1 2

样例输出

4

样例说明

路径:0 → -1 → 0 → 1 → 2,可以对 0,-1,1,2 四个矿洞挖掘并获得最多 4 块矿石。

评测用例规模与约定

  • 对于 20% 的评测用例,1 ≤ n ≤ 10³;
  • 对于所有评测用例,1 ≤ n ≤ 10⁵,-10⁶ ≤ ai​ ≤ 10⁶,1 ≤ m ≤ 2 × 10⁶。

运行限制

语言最大运行时间最大运行内存
C++1s256M
C1s256M
Java3s512M
Python310s512M
PyPy33s512M
Go5s512M
JavaScript5s512M

思路:

代码如下:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll MAX_M = 2e6 + 10;
ll a[MAX_M],b[MAX_M];//a为右,b为左 
ll pre_a[MAX_M],pre_b[MAX_M];
int main() 
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    ll n, m,cnt =0;
    cin >> n >> m;
    for (ll i = 0; i < n; ++i) 
	{
        ll x;
        cin >> x;
		if (x > 0 && x <= m) 
		{
            a[x]++;
        } 
		else if(x < 0 && -x <= m) 
		{
            b[-x]++;
        }
        else if(x == 0)
        cnt ++;
    }
    pre_a[0] = a[0];
    pre_b[0] = b[0];
    for (ll i = 1; i < MAX_M; ++i) 
	{
        pre_a[i] = pre_a[i - 1] + a[i];
        pre_b[i] = pre_b[i - 1] + b[i];
    }

    ll ans = 0;
    // 处理先向左走i步,再向右走剩余步数的情况
    for (ll i = 0; i <= m; ++i) 
	{
        if (m - 2 * i < 0) 
		continue;
        ans = max(ans, pre_b[i] + pre_a[m - 2 * i]);
    }

    // 处理先向右走i步,再向左走剩余步数的情况
    for (ll i = 0; i <= m; ++i) 
	{
        if (m - 2 * i < 0) 
		continue;
        ans = max(ans, pre_a[i] + pre_b[m - 2 * i]);
    }

    cout << ans + cnt << endl;

    return 0;
}

http://www.dtcms.com/a/69102.html

相关文章:

  • `gradio save_to_cache permission denied`
  • LeeCode题库第1456题
  • Linux应用:进程的回收
  • 2018年全国职业院校技能大赛高职组-计算机网络应用竞赛竞赛样题C卷
  • springboot+springai调用deepseek实现与大模型对话聊天
  • Log4j2漏洞攻略
  • H.264视频编解码:从原理到应用
  • 【日志队列】log日志实时写入队列,流式输出
  • 【Java 基础(人话版)】进制转换
  • 【区块链】以太坊
  • 什么是云原生?
  • 前端主题切换架构设计方案
  • 蓝耘携手通义万象 2.1 图生视频:开启创意无限的共享新时代
  • 【软设中级】软件设计师中级专题复习:(专题二)程序语言部分
  • 从AI产品经理视角深度剖析Manus:技术、定位与商业化的三重跃迁
  • 如何快速检测光模块内部光纤裂纹?
  • C++ primer plus 类和对象下
  • 从头开始学C语言第二十三天——指针概念
  • MFC控件按钮的使用
  • 深入浅出消息队列 (MQ)
  • Java 断言(Assert)机制
  • pgAdmin 4汉化,设置界面为中文
  • 机器学习(七)
  • 太速科技-636-基于FMC的Kintex XCKU060高性能PCIe载板
  • LVI-SAM、VINS-Mono、LIO-SAM算法的阅读参考和m2dgr数据集上的复现(留作学习使用)
  • python广度优先搜索(BFS)算法
  • 16.使用读写包操作Excel文件:XlsxWriter 包
  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(47)乾坤图演路径 - 欧拉路径(Hierholzer 算法)
  • 完善机器人:让 DeepSeek 使用Vue Element UI快速搭建 AI 交互页面
  • vue埋点