牛客每日一题:显生之宙(Java)

显生之宙

题意

这道题目的意思大致是:我们有一个数列,需要进行 n-1 次操作,每次操作我们可以选择其中一个元素 x ,再选择其他至少一个元素,让它们加上 x ,然后删除 x ,问最后剩下的那个元素最小是多少。

思路

这道题的解题中心主要在于:我们如何决定每个元素的删除顺序以及最后剩下的是哪一个元素。

首先,显然我们需要先删除较小的数,因为它能让其他数尽可能地不变大,这符合我们的最终目的。所以接下来我们只需要考虑最后剩下哪一个元素。

我们应当剩下最大的数。为什么?因为显然,负数能够让其他的数都变小,而正数我们则需要尽可能减小它的影响,所以相应地,我们应当尽可能扩大小的数的影响,减小大的数的影响,这也是为何我们需要先处理小的数,后处理大的数,最后剩下最大的数。

基于此,我们先进行一次从大到小的排序,而后遍历求解即可。

正解代码

java 复制代码
import java.util.*;

public class Main{
    static Scanner in = new Scanner(System.in);
    public static void solve(){
        int n = in.nextInt();
        long []a = new long[n + 1];
        for(int i = 1;i <= n;i++) a[i] = in.nextInt();
        Arrays.sort(a, 1, n+1);
        long all = 0;
        long nxt = 0;
        for(int i=1;i<=n;i++){
            a[i] += all+nxt;
            nxt = 0;
            if(a[i] < 0){
                all += a[i];
            }
            else{
                nxt += a[i];
            }
        }
        System.out.println(a[n]);
    }
    public static void main(String[] args){
        int T = in.nextInt();
        for(;T > 0;T--){
            solve();
        }
    }
}

以上就是这篇文章的全部内容。

相关推荐
Jasmine_llq5 小时前
《P5663 [CSP-J 2019] 加工零件》
数据结构·算法·bfs·广度优先搜索·分层 bfs /·奇偶分层最短路·奇数最短步数
在所不辞兄6 小时前
分层PINN提升多物理场一致性
人工智能·神经网络·算法·机器学习·工程仿真
wanderist.6 小时前
CSP 第43次认证 T4:集合划分 —— 图染色与二分图判定
算法·图论
且从容.6 小时前
JS篇-----
java·javascript·jvm
夜之眷属6 小时前
记一次战斗服务器 CPU 打满 100% 且“无法恢复“的排查
java·linux·运维·服务器·后端·性能优化
不做无法实现的梦~6 小时前
基于 PX4 的全仓库架构、无人机算法解析与开发学习规划
算法·架构·无人机
starzy19906 小时前
Flink ResourceManager启动流程源码深度剖析:从ClusterEntrypoint到Slot分配的完整链路
java·大数据·flink
悠仁さん6 小时前
【C++】auto
java·前端·c++
做cv的小昊6 小时前
【大模型算法自学笔记01】NLP基础知识(1.1 自注意力)
人工智能·笔记·算法·自然语言处理·大模型·llm
郝学胜-神的一滴6 小时前
C++ Templates 07:编译报错和调试手段与实战技巧
开发语言·c++·后端·软件工程·visual studio