• T137288 铸星


    有以下三种情况:

    1. 只有一个数,直接输出。
    2. 有正数也有复数,那就先让负数撞正数得到更小的负数,直到剩下最后一个正数撞所有的负数,答案是所有数的绝对值之和。
    3. 仅有正数或者仅有负数,就先找一对不相等的相邻的数$x$和$y$来得到另外一个符号的数,回到第二种情况,答案是绝对值之和$-left|x ight|-left|y ight|+left|x-y ight|$。那么只要后面这串式子最大即可。

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #define IL inline
    #define RG register
    using namespace std;
    typedef long long LL;
    #define RI RG int
    #define RC RG char
    const int N=5e5;
    
        int n;
        LL a[N+3];
    
    int main(){
        scanf("%d",&n);
        for(RI i=1;i<=n;i++)
            scanf("%lld",&a[i]);
            
        if(n==1){
            printf("%lld",a[1]);
            return 0;
            
        }
        
        LL s=0;
        int c=0;
        for(RI i=1;i<=n;i++){
            s+=abs(a[i]);
            c+=(a[i]>0);
            
        }
        
        if(c!=0&&c!=n){
            printf("%lld",s);
            return 0;
            
        }
        
        LL x=-1LL<<60;
        for(RI i=2;i<n;i++)
            x=max(x,abs(a[i]-a[i+1])-abs(a[i])-abs(a[i+1]));
        printf("%lld",s+x);
    
        return 0;
    
    }
    View Code
  • 相关阅读:
    POJ2965(The Pilots Brothers' refrigerator)
    POJ1753(Flip Game)
    POJ3253(Fence Repair)
    山东理工大学的训练计划
    loutsScript 常用代码
    《大道至简》读后感
    2019暑第三周
    2019暑第二周
    2019暑第一周
    关于13组作品《TD tree》的使用感想
  • 原文地址:https://www.cnblogs.com/Hansue/p/13187328.html
Copyright © 2020-2023  润新知