牛客NOIP暑期七天营-普及组5-A手术等级

手术等级???

https://ac.nowcoder.com/acm/contest/929/A

题目大意:一个从1开始编号的数组的不完美度为,现在可以将数组分成两个从1开始编号的数组,请问分成的两个数组的不完美度之和最小是多少?

将一个数组分成两半,左半边的不完美度的没有任何变化的。

右半部分,假设是从i开始,区间是[i, n]:
第i个元素由a[i]i变成了a[i]*1,第i+1个元素由a[i+1](i+1)变成了a[i+1]2,第j个元素由a[j]*j变成了a[j](j-i+1)……
即这个区间多有元素都少加了i-1次!

枚举端口位置i,右边区间之和乘以i-1即可以减去的不完美度。

注意,整个区间加起来,极端情况下是1e51e51e9/2,约5e18,好像没爆long long。

#include <bits/stdc++.h>
#define LL long long
#define N 100005
using namespace std;
LL n, m, i, j, k, a[N], s[N];
int main(){
    scanf("%lld", &n);
    for(i=1; i<=n; i++){
        scanf("%lld", &a[i]);
        s[i] = s[i-1] + a[i];
    }
    for(i=1; i<=n; i++){
        m = max(m, (s[n]-s[i-1]) * (i-1));
    }
    for(m=-m, i=1; i<=n; i++){
        m += a[i] * i;
    }
    printf("%lld\n", m);
    return 0;
}
全部评论

相关推荐

是正式编吗?稳定吗?工资待遇怎么样?转正可以转到腾讯总部吗?
Java抽象带篮子:不是,不稳定,一般,不行
投递腾讯云智研发等公司8个岗位 >
点赞 评论 收藏
分享
05-09 12:23
已编辑
华南理工大学 Java
野猪不是猪🐗:给他装的,双九+有实习的能看的上这种厂我直接吃⑨✌们拿它练练面试愣是给他整出幻觉了
点赞 评论 收藏
分享
06-18 15:03
重庆大学 运营
运营你豪哥:做一下被打的数据,分析输出优化建议
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务