蓝桥杯算法——铠甲合体

news/2025/3/6 18:18:41/

问题描述

暗影大帝又开始搞事情了!这次他派出了 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/news/1577135.html

相关文章

如何在React中正确处理异步操作?

文章目录 1. 引言2. 异步操作的典型场景与潜在问题2.1 典型场景2.2 常见问题 3. 基本原则与最佳实践3.1 封装异步逻辑3.2 使用React Hooks管理副作用3.3 管理加载、错误与数据状态3.4 防止内存泄漏3.5 避免竞态条件 4. 在React中处理异步操作的方法4.1 使用 useEffect 处理异步…

Webpack分包与合包深度解析

Webpack分包与合包深度解析 引言&#xff1a;现代前端工程的模块化困境 在单页面应用&#xff08;SPA&#xff09;复杂度日益增长的今天&#xff0c;一个未经优化的Webpack构建产物可能面临&#xff1a; 首屏加载缓慢&#xff08;超过3秒白屏&#xff09;公共模块重复打包&am…

JAVA毕设项目-基于SSM框架的百色学院创新实践学分认定系统源码+设计文档

文末获取源码数据库文档 感兴趣的可以先收藏&#xff0c;有毕设问题&#xff0c;项目以及论文撰写等问题都可以和博主沟通&#xff0c;尽最大努力帮助更多的人&#xff01; 百色学院创新实践学分认定系统设计与实现 摘 要 本百色学院创新实践学分认定系统是针对目前实践学分认定…

利用golang embed特性嵌入前端资源问题解决

embed嵌入前端资源&#xff0c;配置前端路由的代码如下 func StartHttpService(port string, assetsFs embed.FS) error {//r : gin.Default()gin.SetMode(gin.ReleaseMode)r : gin.New()r.Use(CORSMiddleware())// 静态文件服务dist, err : fs.Sub(assetsFs, "assets/di…

【数据结构】什么是栈||栈的经典应用||分治递归||斐波那契问题和归并算法||递归实现||顺序栈和链栈的区分

文章目录 &#x1f967;栈的初步理解&#xff1a;&#x1f967;易错&#xff1a;如何判断栈满&#x1f967;栈满理解&#x1f967;栈的基本运算&#x1f4da;栈操作的伪代码逻辑&#xff08;顺序和链栈&#xff09;&#x1f4d5;顺序栈运算实现&#xff1a;顺序栈的表示&#x…

机器学习工程师技术图谱和学习路线

机器学习工程师技术图谱与学习路线(2025年) 一、基础阶段 数学基础 线性代数:矩阵运算、特征值与特征分解(主成分分析/PCA的基础)概率与统计:贝叶斯定理、条件概率、假设检验、分布模型(如朴素贝叶斯分类器的基础)微积分与优化:梯度下降、损失函数优化(如神经网络的…

蓝桥杯刷题周计划(第一周)

目录 前言题目一题目代码题解分析 题目二题目代码题解分析 题目三题目代码题解分析 题目四题目代码题解分析 题目五题目代码题解分析 题目六题目代码题解分析 题目七题目代码题解分析 题目八题目代码题解分析 题目九题目代码题解分析 题目十题目代码题解分析 题目十一题目代码题…

PythonCrowler

requests模块 python中原生的一款基于网络请求的模块,作用是模拟浏览器发送请求 指定url-发送请求-获取响应数据-持久化存储 pro1:爬取搜狗首页的页面数据 basic crowler import requests if __name__ __main__:urlhttps://www.sogou.comresrequests.get(url)page_datare…