牛客网 - 集训队脱单大法:这是一道只能由学姐我自己出数据的水题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lzyws739307453/article/details/85473829

题目链接:https://ac.nowcoder.com/acm/contest/322/F
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述 

总所不周知!ZZZZone有了女朋友却谁也不知道。但是ZZZZone在集训队总是和陈大佬走的很近,每天搂搂抱抱十分不成体统!于是就被ZZZZone的女朋友给知道了,但是呢,ZZZZone的女朋友是一个热爱画画的温柔又可爱的女子,于是她决定把ZZZZone大卸两块,没错是两块!!
ZZZZone呢他的长度为 n,并且每个单位长度都有一个相对应的重量,他的小女朋友希望将ZZZZone切成两部分后,两个部分中的最大重量之差的绝对值最大(显然两个部分均不能为空啊),她呢觉得很惆怅,不知道该怎么切最好,所以想让你们来想想办法。

输入描述:

第一行为一个n(2 <= n <= 10^5),表示ZZZZone的长度,第二行为n个数,表示ZZZZone每个单位长度的重量(0 <= a[i] <= 10^6)。

输出描述:

输出切成两部分后,每部分的重量的最大值之差的绝对值最大是多少。

输入

4
3 4 1 6 

输出

3

备注:

对于样例:
4
3 4 1 6
那么一共有 3 种切法,分别是:
第一部分为 { 3 }, 第二部分为{ 4,1,6 },此时两部分的最大值之差的绝对值为 3
第一部分为 { 3,4 }, 第二部分为{ 1, 6 },此时两部分的最大值之差的绝对值为 2
第一部分为 { 3,4,1 }, 第二部分为{ 6 },此时两部分的最大值之差的绝对值为 2
所以答案为3.

解题思路

最优的方案肯定是:要么第一个为一部分,要么是最后一个为一部分。

#include <iostream>
using namespace std;
int main()
{
    int n, i, maxn = 0, s[100010];
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        scanf("%d", &s[i]);
        if (maxn < s[i])
            maxn = s[i];
    }
    printf("%d\n", maxn - min(s[0], s[n - 1]));
    return 0;
}

猜你喜欢

转载自blog.csdn.net/lzyws739307453/article/details/85473829
今日推荐