【贪心】Three Parts of the Array

17暑假练习赛2 Codeforces Round #498 (Div. 3) 1006C


题意:n个数,相对顺序不能变,把他分为3个区域,每个区域和分别为sum1,sum2,sum3,区域可以为空,

条件:需要sum1==sum3。问你最大的sum1和sum3是多少?

题解:因为分数字的时候相对位置不能变,所以直接两边往中间靠近外加特判就可以了。


#include<stdio.h>
int main()
{
    int n;
    long long number[200010];
    scanf("%d",&n);
    for (int i=0;i<n;i++)
    {
        scanf("%lld",&number[i]);
    }
    long long sum1=0;long long sum3=0;long long max=0;
    int l=0,r=n-1;
    while(l<=r)
    {
        if(sum1<sum3)
        {
            sum1+=number[l];
            l++;
        }
        if(sum1>sum3)
        {
            sum3+=number[r];
            r--;
        }
        if(sum1==sum3)
        {
            if(sum1>max)
            max=sum1;
            sum1+=number[l];
            l++;
        }
    }
    printf("%lld\n",max);
}

猜你喜欢

转载自blog.csdn.net/u011590573/article/details/81395883