蓝桥杯算法——铠甲合体

ops/2025/3/11 6:21:21/

问题描述

暗影大帝又开始搞事情了!这次他派出了 MM 个战斗力爆表的暗影护法,准备一举摧毁 ERP 研究院!MM 个暗影护法的战斗力可分别用 B1,⋯,BMB1​,⋯,BM​ 表示。

ERP 研究院紧急召唤了 NN 位铠甲勇士前来迎战!每位铠甲勇士都拥有强大的能量,能量值分别为 A1,⋯,ANA1​,⋯,AN​。这些能量值之间存在着某种特殊的联系:任意两位铠甲勇士的能量值,其中一个总是另一个的整数倍。

例如,可能存在能量值分别为 1,2,4,81,2,4,8 的铠甲勇士,但绝不会出现能量值分别为 22 和 33 的铠甲勇士。

为了击败暗影护法,铠甲勇士们需要进行合体,将自身的能量组合起来。当合体后的能量总和恰好等于护法的战斗力时,就能将其击败。 现在,ERP 研究院需要你的帮助!对于每个暗影护法,请你计算出需要多少个铠甲勇士合体才能击败他。如果无论如何都无法击败,那就暂时撤退!

输入格式

第一行输入两个整数 NN 和 MM (1≤N,M≤1051≤N,M≤105),分别表示铠甲勇士的数量和暗影护法的数量。

第二行输入 NN 个整数 A1,A2,…,ANA1​,A2​,…,AN​ (1≤Ai≤10101≤Ai​≤1010),表示每个铠甲勇士的能量值。

第三行输入 MM 个整数 B1,B2,…,BMB1​,B2​,…,BM​ (1≤Bi≤10101≤Bi​≤1010),表示每个暗影护法的战斗力。

输出格式

输出一行,包含 MM 个整数,分别表示击败每个暗影护法所需的最少合体个数;如果无法击败则输出 −1−1。

样例输入

3 2
2 2 2
6 3

样例输出

3 -1

答案 

import java.util.*;
import java.util.function.BiFunction;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);//在此输入您的代码...int N = scan.nextInt();int M = scan.nextInt();//对铠甲勇士的数据进行记录TreeMap<Long,Integer> map = new TreeMap<>((o1, o2) -> {//对勇士的数值进行排序(底层用的堆,设置好排序规则后不用管)if (o2 - o1 > 0) return 1;if (o2.equals(o1)) return 0;else return -1;});int[] res = new int[M];for (int i = 0;i < N;i++){map.merge(scan.nextLong(), 1, (o,n) -> o + 1);}for (int i = 0;i < M;i++){Long curr = scan.nextLong();for (Map.Entry<Long,Integer> entry : map.entrySet()) {//解题思路//从大到小进行判断,key是当前的勇士能量,val是勇士的个数//curr / entry.getKey()是如果用该勇士处理护法,需要多少个//map.get(entry.getKey())是当前勇士的个数//判断当前勇士个数和所需勇士个数哪个小,就给结果上加几(若勇士多于所需,则没必要使用完,若不够,则要全部使用)res[i] += Math.min(map.get(entry.getKey()),curr / entry.getKey());//当前勇士消弱护法的数值curr -= entry.getKey() * Math.min(map.get(entry.getKey()),curr / entry.getKey());//继续用数值小的勇士进行尝试}//为了防止取模后curr不为0(比如护法为17,勇士为8,8,4,最后会剩下1)res[i] = curr.equals(0L) ? res[i] : -1;}//蓝桥杯的输出格式那里MVP,算法躺赢狗StringBuilder sb = new StringBuilder();for (int i : res) {sb.append(i).append(" ");}System.out.println(sb.toString());scan.close();}
}

结果

 


http://www.ppmy.cn/ops/164854.html

相关文章

BGP实验(一)IBGP全互联配置

一、拓扑图 二、实验思路 根据BGP的路由优先原则&#xff0c;首先要保证路由可达。但是IBGP间存在水平分割机制&#xff0c;因此实验可使用IBGP全互联&#xff0c;反射器或联盟来实现IBGP间路由可达&#xff0c;本实验使用全互联全互联缺点&#xff1a;将BGP路由引入到IGP&…

react拖曳组件react-dnd的简单封装使用

分享原因 由于项目中需要使用拖曳组件(需求:全局&#xff0c;跨组件&#xff0c;跨数据)&#xff0c;我选择了react-dnd 概念 React DnD 是一组 React 高阶组件&#xff0c;我们在使用的时候只需要将目标元素进行包裹&#xff0c;就可以实现目标元素具有拖动或接受拖动的功能。…

游戏引擎学习第141天

回顾上期内容并介绍今天的议程 我们之前做了一些音频混音的测试&#xff0c;目前的实现方式是每次播放一个新的声音时&#xff0c;都会完整加载整个音频文件。这导致当多个音频同时播放时&#xff0c;可能会出现混乱的声音效果。之前这样做是为了演示是否可以多次播放相同的音…

STM32_GPIO系统外设学习

按照STM32MCUWIKI、参考手册的外设介绍----->CubeF4的软件包中相关的Exmple代码----->CubeMX设置截图加深理解记忆 资料链接&#xff1a;嵌入式开发_硬软件的环境搭建 外设简介 GPIO代表[General Purpose Input/Output]通用输入/输出。它是集成电路上没有特定功能的引…

【AI深度学习网络】Transformer时代,RNN(循环神经网络)为何仍是时序建模的“秘密武器”?

引言&#xff1a;什么是循环神经网络&#xff08;RNN&#xff09;&#xff1f; 循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09; 是一种专门处理序列数据&#xff08;如文本、语音、时间序列&#xff09;的深度学习模型。与传统神经网络不同&#xff0c;R…

Autojs无线连接vscode方法

1.获得电脑的IP 在电脑的CMD界面输入 ipconfig 然后找到ipv4的那一行&#xff0c;后面的即是你的电脑IP地址 2.打开vscode的autojs服务 安装autojs插件 在vscode界面按下ctrlshiftp 输入autojs 找到 点击 之后打开手机上的autojs 之后输入刚刚电脑上的地址 可以看到vsc…

用Deepseek写一个 HTML 和 JavaScript 实现一个简单的飞机游戏

大家好&#xff01;今天我将分享如何使用 HTML 和 JavaScript 编写一个简单的飞机游戏。这个游戏的核心功能包括&#xff1a;控制飞机移动、发射子弹、敌机生成、碰撞检测和得分统计。代码简洁易懂&#xff0c;适合初学者学习和实践。 游戏功能概述 玩家控制&#xff1a;使用键…

解决CentOS 8.5被恶意扫描的问题

CentOS 8 官方仓库已停止维护(EOL),导致一些常用依赖包如fail2ban 无法正常安装。 完整解决方案: 一、问题根源 CentOS 8 官方仓库已停更:2021 年底 CentOS 8 停止维护,默认仓库的包可能无法满足依赖关系。EPEL 仓库兼容性:EPEL 仓库可能未适配 CentOS 8.5 的旧版本依赖…