时津风曾沉迷于页游 Kancolle。在游戏中,有一项日常任务需要玩家使用油、弹药、钢材、铝这 4 种资源来开发装备。 现给定目标资源量 a,b,c,d ,时津风进入开发界面时 4 种资源均为 10 单位。她可以对单一资源执行以下任意一种操作(资源总量始终保持在区间 [10,300] ): 将该资源 ± 1 ; 将该资源 ± 10 ; 将该资源 ± 100 ; 直接将该资源设为上限 300 ; 直接将该资源设为下限 10 。 在保证所有资源始终处于合法范围的前提下,求使四种资源同时恰好达到 (a,b,c,d) 所需的最少操作次数。
第一行输入整数 T(1≤ T≤ 10^5) —— 测试组数。 接下来 T 行,每行输入 4 个整数 a,b,c,d(10≤ a,b,c,d≤ 300) 。
对每组数据输出一个整数,表示最少操作次数。
2 10 100 200 300 10 10 10 10
5 0
考点:广度优先搜索(BFS)
数据规模 T ≤ 1e5 | 限制 1 秒 / 256MB | 标准输入输出
推荐方向:广度优先搜索(BFS)
按层扩散搜索,无权图上第一次到达即最短路。
思路框架(广度优先搜索(BFS) 通法 · 非本题专属)
实现要点:标记访问必须在入队时做,不能在出队时做,否则会重复入队甚至超时。
复杂度:时间 O(V+E) | 空间 O(V)
该范式的通法易错点
对照本题
样例 1:输入 2 / 10 100 200 300 / 10 10 10 10 → 输出 5 / 0
样例1:
第一组测试数据,可能的操作是:
初始 [10,10,10,10]
将弹药增加 100 ,变成 [10,110,10,10]
将弹药减少 10 ,变成 [10,100,10,10]
将钢材增加到上限,变成 [10,100,300,10]
将钢材减少 100 ,变成 [10,100,200,10]
将铝增加到上限,变成 [10,100,200,300]
可以发现无法使用 5 次以下的操作来达到开发所需的资源量,所以答案为 5 。
第二组测试数据,开发所需的资源量就为资源初始值,所以不需要进行任何操作。
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:华为机试编程模拟题6。