首页 > 其他分享 >牛客月赛~~B显生之宙

牛客月赛~~B显生之宙

时间:2024-03-30 21:03:54浏览次数:18  
标签:数列 显生 int long 负数 牛客 ans 之宙 now

题目描述:
白垩色的王子给了你一个由 n 个数组成的数列,并告诉你,你需要执行 n-1次如下操作:
选定一个数列中的数 x,再选择数列中的至少一个其他数,然后让这些数都加上 x,再将 x 移除出这个数列。
经 n-1 次操作过后,数列中最后只会剩下一个数。白垩色的王子希望你告诉他,最后剩下的那个数最小是多少。题目保证最后输出的答案的绝对值 <=4*10e18。
在这里插入图片描述
**在这里插入图片描述

思路分析

:我们先想一想,如果全都是正数,我们只能让一个数加最多加一个数,这样才能使得最后剩下的那一个数是最小的,而且我们要保证每次加过来的数是最小的的如果每次加来的是最大的数,相当于变相的加了很多次大的数这就导致最后的剩下的数不是我们需要的了,如果有负数存在我们应该让这个负数去加每一个数,这样使得最后的数是最小的:**
*

温馨提示:*

我们在计算所有负数加到1其他数上面的过程里面,如果用暴力的话肯定会超时,所以我们应该想一个优化的方式,因为负数是加到每一个数,这一个过程是累加的,因此我们不需要一个一个数去加,我们可以把所有负数先加在一起,用now来维护,防止超时

代码如下

#include<iostream>
#include<algorithm>
using namespace std;
int T;
long long n;
long long  a[500005];
int main()
{
    cin>>T;//循环次数
    while(T--)
    {
        cin >> n;
        for (int i = 1; i <= n; i ++) 
        cin >> a[i];
        sort(a + 1, a + n + 1);排序每次加最小的
        long long ans = 0, now = 0,sum=0;
        for (int i = 1; i <= n; i ++) 
        {
            a[i] += now ;
            if (a[i] < 0)    now += a[i];
            //这一步非常关键,把所有负数放一起
            //省的加好几次
            else    ans += a[i];
        }
        if (a[n] < 0)    ans = a[n];
        ///特判一下,因为上面else是a[i]大于0的情况才有,
        //所以如果a[]里面全是负数那么ans将不会被更新了
        cout << ans << '\n';
    }
    

标签:数列,显生,int,long,负数,牛客,ans,之宙,now
From: https://blog.csdn.net/2302_80415058/article/details/137182326

相关文章

  • 牛客 [NOIP2001]数的划分
    https://ac.nowcoder.com/acm/problem/16695#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;typedefpair<int,int>PII;constLLMAXN=1e18,MINN=-MAXN,INF=0x3f3f3f3f;constLLN=200200,M=2020;LLn,k;LLans=0;voiddfs(intidx......
  • 牛客竞赛动态规划专题班数位dp例题
    题单A-0的个数这题算是一个思维题。我的做法是就是统计每一位的0有多少个。例如\(4032\)个位的零有\(403\)种十位的零有\(40*10\)种百位的零有\(3*100+33\)种,即千位去\([1,3]\)个位低两位取\([00,99]\),或者千位取\(4\)低两位取\([00,33]\)千位不能取零#include<......
  • 牛客编程题
    提示:文章文章目录前言一、背景二、2.12.2总结前言前期疑问:本文目标:一、背景最近二、2.1坐标移动https://www.nowcoder.com/practice/119bcca3befb405fbe58abe9c532eb29?tpId=37&tqId=21240&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2......
  • 牛客周赛 Round 38做题笔记
    一.题目链接登录—专业IT笔试面试备考平台_牛客网牛客网是互联网求职神器,C++、Java、前端、产品、运营技能学习/备考/求职题库,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力https://ac.nowcoder.com/acm/contest/78......
  • 牛客周赛 Round 38
    比赛链接:牛客周赛Round38A:小红的正整数自增voidsolve(){lln;cin>>n;for(inti=0;i<=9;i++){lly=n+i;if(y%10==0){cout<<i<<'\n';return;}}}B:......
  • 牛客小白月赛
     B-显生之宙_牛客小白月赛89(nowcoder.com)题解:思路很简单,但是当时晕晕的,写拉了题目要求最大,那么负数要让每一个数都加,正数只能加一个我们正数加到最后一个数即可,负数累加#include<bits/stdc++.h>//#pragmaGCCoptimize("Ofast")#include<iostream>#include<cstdio......
  • 牛客--2024中国传媒大学程序设计大赛(同步赛)
    A-小苯的区间和疑惑题意:做法:前缀最大值+后缀最大值 or 线段树维护最大子段和intarr[200005],pre[200005],last[200005];voidsolve(){//小笨的区间和疑惑--前缀最大值+后缀最大值or线段树维护最大自段和intn;cin>>n;for(inti=1;i<=n;i++)cin......
  • 牛客周赛ROUND37--C题解
    C-红魔馆的馆主(495倍数)题意:做法:dfs搜索后面添加的数字。stringans="1000000000000000000";voiddfs(intcur,stringaddnum){//用数字写的话会无限dfs,因为addnum永远等于0。if(cur==0){if(addnum.size()<ans.size())ans=addnum;return;......
  • 牛客周赛32——小红的矩阵修改
     题目:小红的矩阵修改状态压缩dp,对于每一个串,我们使用一个三进制数表示,由于只有三种字符,我们使用3进制数表示,这样一共就只有81中状态。#include<bits/stdc++.h>typedeflonglongll;usingnamespacestd;constintN=5e2+10;constintmod=1e9+7;intdp[1010]......
  • 牛客小白月赛88 出题复盘
    回顾初次投题是在2023.10.27,由于不熟悉流程,是自己拉了个内测确保题目都完整了才投的(题面+数据+题解全搞定了),后来发现投题的时候其实只需要一个idea加上一个题解。随后恰好赶上年末赛季(猜测,因为确实过了很久),一直拖到2023.12.26才正式进行录题。中途换了一次审题人,到2024.01.1......