HJ163 时津风的资源收集

  • 题目
  • 题解(15)
  • 讨论(7)
  • 排行

中等 通过率:44.75% 时间限制:1秒 空间限制:256M

知识点广度优先搜索(BFS)

校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。

描述

时津风曾沉迷于页游 Kancolle。在游戏中,有一项日常任务需要玩家使用油、弹药、钢材、铝这 44 种资源来开发装备。

现给定目标资源量 a,b,c,da,b,c,d,时津风进入开发界面时 44 种资源均为 1010 单位。她可以对单一资源执行以下任意一种操作(资源总量始终保持在区间 10,30010,300):

∙ ∙将该资源 ±1±1;

∙ ∙将该资源 ±10±10;

∙ ∙将该资源 ±100±100;

∙ ∙直接将该资源设为上限 300300;

∙ ∙直接将该资源设为下限 1010。

在保证所有资源始终处于合法范围的前提下,求使四种资源同时恰好达到 (a,b,c,d)(a,b,c,d) 所需的最少操作次数。

输入描述:

第一行输入整数 T(1≦T≦105)T(1≦T≦105) ------ 测试组数。

接下来 TT 行,每行输入 44 个整数 a,b,c,d (10≦a,b,c,d≦300)a,b,c,d (10≦a,b,c,d≦300)。

输出描述:

对每组数据输出一个整数,表示最少操作次数。

示例1

输入:

复制代码
2
10 100 200 300
10 10 10 10

复制输出:

复制代码
5
0

复制说明:

复制代码
样例1:

第一组测试数据,可能的操作是:

初始 [10,10,10,10][10,10,10,10]
将弹药增加 100100,变成 [10,110,10,10][10,110,10,10]
将弹药减少 1010,变成 [10,100,10,10][10,100,10,10]
将钢材增加到上限,变成 [10,100,300,10][10,100,300,10]
将钢材减少 100100,变成 [10,100,200,10][10,100,200,10]
将铝增加到上限,变成 [10,100,200,300][10,100,200,300]

可以发现无法使用 55 次以下的操作来达到开发所需的资源量,所以答案为 55。

第二组测试数据,开发所需的资源量就为资源初始值,所以不需要进行任何操作。
cpp 复制代码
#include <iostream>
#include <vector>
#include <queue>

using namespace std;

const int MIN_RES = 10;
const int MAX_RES = 300;
vector<int> dist(MAX_RES + 1, -1);

void precompute_bfs() {
    queue<int> q;

    dist[MIN_RES] = 0;
    q.push(MIN_RES);

    while (!q.empty()) {
        int u = q.front();
        q.pop();

        int potential_moves[] = {
            u + 1, u - 1,
            u + 10, u - 10,
            u + 100, u - 100,
            MIN_RES, MAX_RES
        };

        for (int v : potential_moves) {
            if (v >= MIN_RES && v <= MAX_RES && dist[v] == -1) {
                dist[v] = dist[u] + 1;
                q.push(v);
            }
        }
    }
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    precompute_bfs();

    int t;
    cin >> t;
    while (t--) {
        long long total_ops = 0;
        for (int i = 0; i < 4; ++i) {
            int target;
            cin >> target;
            total_ops += dist[target];
        }
        cout << total_ops << endl;
    }

    return 0;
}
相关推荐
2601_962218612 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
anew___2 小时前
蜂鸣器播放音乐——让 Arduino 唱出旋律
c++·stm32·单片机·嵌入式硬件·c
吞下星星的少年·-·2 小时前
The 2026 ICPC Asia East Continent Online Contest (II)(构造)
数据结构·算法
stolentime4 小时前
洛谷P10515 转圈题解
c++·算法·数学建模·贪心算法
tdtsmt5 小时前
穿戴硬件量产工艺实录:天地通电子智能手表主板 SMT 贴片案
c++
和裕5 小时前
蜂窝板 vs 七层瓦楞重型纸箱:大件工业设备运输性能与成本全对比
大数据·运维·网络·人工智能·算法
衡石科技5 小时前
Data_Agent记忆机制与经验复用衡石分析智能体会话记忆与长期学习技术解析
人工智能·科技·学习·算法·企业级bi
shirsl6 小时前
算法 Day 2 滑动窗口 + 栈 / 单调栈
开发语言·python·算法
土司大王7 小时前
LeetCode hot100 回溯专题总结:Java 通用模板、决策树模型
java·算法·leetcode·决策树
2601_962218617 小时前
万象生鲜系统订单全生命周期状态同步技术实现业务可视
大数据·数据库·人工智能·python·算法