题解 | #显生之宙#

显生之宙

https://ac.nowcoder.com/acm/problem/267923

蒟蒻想方设法地尝试了做了很久,总算是做出来了(哭)(本来想用优先队列做的,后面通过率只有90%)(悲)
————————————————————————————————————————————————————
按照题目的意思,有n个数,进行n-1次操作,最后留下一个数
首先是开数组并对数组内的元素输入。

根据题目的意思,可以选择数组里面任意一个数(x),再对至少一个其他数 这个(x)加给它们 ,再把这个x移出列
题目所要求的是,最后留下来的数要尽可能得这说明最后那个数相加过的x最好是 越多负数越好,越少正数越好

由此我们可以观察到两点:
{
    如果x是负数,那么这个x应该给数组内所有的x都提供贡献,让它们全部变小;
    如果x是正数,那么这个x应该给数组内某个正数提供贡献;(因为如果都提供的话,这个值变得更大)
}
同时想到某些数(比如0)加上负数之后会变成负数,我们要让这种情况发生得越多越好
所以我们对数组进行从小到大的排列,让所有的负数先给数组内的所有的值提供贡献(也算是尝试让某些个非负数变成负数)

我定义了个sum变量和minus变量:
{
    minus变量用于存放至今为止所有的负数提供过的贡献
    sum变量是以数组最后的值为基准发生过的变化的总值
}
在每一次循环中,用 temp存储num[i],代表当前数字的值,再用temp减去minus代表这个值被minus贡献过后是多少。

如果temp被minus贡献过后的值小于0,那么这个temp的值我们就贡献给所有值
反之如果这个temp是大于等于0,那么这个temp我们就只贡献给最后的最大值

所以作为sum来说(最后的最大值来说),无论怎样这个值都是必须加的

最后我们再把我们的最大值给加进去,就得到结果
//是的我知道这很抽象,但是本蒟蒻在一开始是不仅加上最大值而且还加上了minus,结果就不对了
//我也不知道怎么解释,但是我抱着:”sum本身是以最大值为基准,最后加上最大值也没问题吧“的心态试了一下就过了
//不知道有没有大佬懂具体是怎么说,orz orz orz 给跪了

模拟案例1的第二组的话就是
-1 8 -2 0变成 -2 -1 0 8

temp=-2+0=-2小于0,minus=0+(-2)=-2,sum=0+(-2)=-2
temp=-1+(-2)=-3小于0,minus=-2+(-3)=-5,sum=-2+(-3)=-5
temp=0+(-5)=-5小于0,minus=-5+(-5)=-10,sum=-5+(-5)=-10

sum=sum+最后值(8)=-10+8=-2

不知道好不好懂,也不知道题解写得好不好…………总体来说也是做完题目思考完,写个题解不仅帮别人理解也加深一些印象和理解吧…………
蒟蒻走了,orz
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        
        vector<long long>num(n);
        
        for(int i=0;i<n;i++)
        {
            cin>>num[i];
        }
        
        long long sum=0;
        long long minus=0;
        
        sort(num.begin(),num.end());
        
        for(int i=0;i<n-1;i++)
        {
            long long temp=num[i];
            
            temp=temp+minus;
            
            sum=sum+temp;
 
            if(temp<0)
            {
                minus+=temp;
            }
        }
        
        sum=sum+num[num.size()-1];
        cout<<sum<<endl;
        
    }
}


全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
3876次浏览 45人参与
# 离家近房租贵VS离家远但房租低,怎么选 #
16896次浏览 137人参与
# 巨人网络春招 #
11525次浏览 224人参与
# 春招至今,你的战绩如何? #
15716次浏览 144人参与
# 你的实习产出是真实的还是包装的? #
3051次浏览 53人参与
# 沪漂/北漂你觉得哪个更苦? #
1513次浏览 40人参与
# 米连集团26产品管培生项目 #
7286次浏览 226人参与
# HR最不可信的一句话是__ #
1078次浏览 32人参与
# AI面会问哪些问题? #
935次浏览 23人参与
# 你做过最难的笔试是哪家公司 #
1228次浏览 22人参与
# AI时代,哪个岗位还有“活路” #
2814次浏览 51人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152901次浏览 889人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
8007次浏览 43人参与
# XX请雇我工作 #
51155次浏览 171人参与
# 简历第一个项目做什么 #
32131次浏览 360人参与
# 简历中的项目经历要怎么写? #
311028次浏览 4264人参与
# 投格力的你,拿到offer了吗? #
178337次浏览 891人参与
# 你最满意的offer薪资是哪家公司? #
76978次浏览 375人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187585次浏览 1123人参与
# AI时代,哪些岗位最容易被淘汰 #
64730次浏览 886人参与
# 如果重来一次你还会读研吗 #
230010次浏览 2011人参与
# 正在春招的你,也参与了去年秋招吗? #
364336次浏览 2642人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务