数字的最大美丽值(蓝桥云课)

news/2025/3/22 9:32:50/

问题描述

小蓝是一名年轻的数学家,他最近对数组的美丽值产生了浓厚的兴趣。他定义了一个数组的美丽值为任意两个数的乘积之和,即 ∑i=1n∑j=i+1n(ai×aj)∑i=1n​∑j=i+1n​(ai​×aj​)。为了深入研究这个概念,他收集了一个长度为 nn 的数组 aa。 他想知道通过 kk 次操作后,任意两个数的乘积之和最大可以达到多少。每次操作可以将数组 aa 中的任意一个数加 11。请你帮他解决这个问题,并将答案对 109+7109+7 取模。

输入格式

第一行输入两个整数 nn 和 kk ,表示 aa 的长度以及可操作次数。

第二行输入 nn 个空格隔开的整数 aiai​ 。

数据范围保证:1≤n≤3×1051≤n≤3×105,1≤ai,k≤1091≤ai​,k≤109 。

输出格式

输出一个整数表示答案,答案需要对 109+7109+7 取模。

样例输入

2 2
4 1

样例输出

12

说明

样例中将 11 变为 33 后,数组的美丽值为 3×4=12。

java">import jdk.swing.interop.SwingInterOpUtils;import java.util.PriorityQueue;
import java.util.Scanner;public class MaxBeautyOfNum {static long MOD=1000000007;public static void main(String[] args){Scanner scanner=new Scanner(System.in);int n=scanner.nextInt();long k=scanner.nextLong();long ans=0;PriorityQueue<Long> pq=new PriorityQueue<>();for(int i=0;i<n;i++){long t=scanner.nextLong();pq.add(t);}for(int i=0;i<k;i++){long min=pq.poll();min+=1;pq.add(min);}Long[] array = pq.toArray(new Long[0]);for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){ans=ans+array[i]*array[j]%MOD;}}System.out.println(ans%MOD);}
}

上面的代码会出现运行超时的情况,改进如下代码:

java">import java.util.PriorityQueue;
import java.util.Scanner;public class MaxBeautyOfNum {static long MOD = 1000000007;public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();long k = scanner.nextLong();PriorityQueue<Long> pq = new PriorityQueue<>();long totalSum = 0, beauty = 0;// 初始化优先队列并计算初始总和for (int i = 0; i < n; ++i) {long t = scanner.nextLong();pq.add(t);totalSum += t;}// 计算初始美丽值Long[] initialArray = pq.toArray(new Long[0]);long t1=totalSum;for (long num : initialArray) {t1 -= num;beauty = (beauty + num * t1) % MOD;}// 执行k次操作for (long i = 0; i < k; ++i) {long min = pq.poll(); // 取出当前最小值beauty = (beauty + totalSum - min + MOD) % MOD; // 更新美丽值totalSum += 1; // 总和增加1(因为min变为min+1)min += 1; // 最小值加1pq.add(min); // 将增加后的值重新加入队列}System.out.println(beauty);}
}

 get到一个新技能:求数组两两乘积之和的另外一个方法:

 


http://www.ppmy.cn/news/1581107.html

相关文章

如何把全局坐标系转到机器人本体坐标系

场景 假设某虚拟机器人 R v R_v Rv​与跟随者机器人 R f R_f Rf​位置关系如下&#xff1a; 全局坐标系 ( X )、( Y )&#xff1a;全局坐标系的坐标轴&#xff0c;( O ) 为全局坐标系原点&#xff0c;用于描述机器人在宏观环境中的位置与姿态。 跟随机器人&#xff08; R f …

【C++】:异常

目录 C语言处理错误的方式 C异常的概念 C异常的使用 异常的抛出与捕获匹配原则 函数调用链中的栈展开 异常重新抛出 异常安全 异常规范 标准库异常体系 自定义异常体系 异常的优缺点 C语言处理错误的方式 返回值检查&#xff1a;函数返回特定错误码或值标识失败&am…

用逻辑分析仪分析Usart波形

USART的波形抓取最简单&#xff0c;帧头帧尾只需要电平上升下降沿就可以了&#xff0c;不需要自己定义&#xff0c;也没有ID位&#xff0c;逻辑分析仪可以直接抓取发送的数据&#xff1a; 口配置&#xff1a;9600bps&#xff0c;8数据位&#xff0c;无校验&#xff0c;1个停止位…

6.5840 Lab 3: Raft

论文很重要 raft-zh_cn/raft-zh_cn.md at master maemual/raft-zh_cn GitHub Part 3A: leader election (moderate) 十次test都过了 实现 Raft 的领导者选举和心跳机制&#xff08;AppendEntries RPC&#xff0c;无日志条目&#xff09;。第 3A 部分的目标是实现以下功能&am…

使用 Apktool 反编译、修改和重新打包 APK

使用 Apktool 反编译、修改和重新打包 APK 在 Android 逆向工程和应用修改过程中&#xff0c;apktool 是一个强大的工具&#xff0c;它允许我们解包 APK 文件、修改资源文件或代码&#xff0c;并重新打包成可安装的 APK 文件。本文将介绍如何使用 apktool 进行 APK 反编译、修…

OpenCV vs MediaPipe:哪种方案更适合实时手势识别?

引言 手势识别是计算机视觉的重要应用&#xff0c;在人机交互&#xff08;HCI&#xff09;、增强现实&#xff08;AR&#xff09;、虚拟现实&#xff08;VR&#xff09;、智能家居控制、游戏等领域有广泛的应用。实现实时手势识别的技术方案主要有基于传统计算机视觉的方法&am…

微信 MMTLS 协议详解(五):加密实现

常用的解密算法&#xff0c;对称非对称 加密&#xff0c;密钥协商&#xff0c; 带消息认证的加解密 #生成RSA 密钥对 void GenerateRsaKeypair(std::string& public_key,std::string& private_key) {RSA* rsa RSA_new();BIGNUM* bn BN_new();// 生成 RSA 密钥对BN_s…

期刊分区表2025年名单下载(经济学、管理学)

2025年期刊分区表包括SCIE、SSCI、A&HCI、ESCI和OAJ&#xff0c;共设置了包括自然科学、社会科学和人文科学在内的21个大类 本次分享的是期刊分区表2025年名单经济学类、管理学类&#xff0c;一共7631025条 一、数据介绍 数据名称&#xff1a;期刊分区表2025年名单 数据…