• UVA11300


    初步解题原理:代数运算+单元素极值

    代数运算:

    xi表示第i个给i-1的数量,正负表示给或得

    c=(a1+a2+a3....an)/n

    a1-x1+x2=c -->x2=x1-a1+c

    a2-x2+x3=c -->x3=x1-a1-a2+2c

    a3-x3+x4=c -->x4=x1-a1-a2-a3+3c

    ......

    an-xn+x1=c -->xn=x1-a1-a2-a3....-a(n-1)+(n-1)c

    ans=max{|x1|+|x2|+|x3|+....|xn|=|x1-0|+|x1-a1+c|+|x1-a1-a2+2c|.......|x1-a1-a2-a3....-a(n-1)+(n-1)c|}

    我们可以用x1表示任意量

    ans=min{|x-b1|+|x-b2|+|x-b3|+|x-b4|.......+|x-bn|}

    当x取{b1,b2,b3,.....bn}排序后的中位数时,ans取最小值

     1 #include<iostream>
     2 #include<string.h>
     3 #include<math.h>
     4 #include<algorithm>
     5 #include<stdio.h>
     6 #define ULL unsigned long long
     7 #define LL long long
     8 #define maxn 1000009
     9 using namespace std;
    10 LL a[maxn];
    11 LL b[maxn];
    12 int main()
    13 {
    14     int n;
    15     while(~scanf("%d",&n))
    16     {
    17         ULL C=0;
    18         for(int i=1;i<=n;i++)
    19         {
    20             scanf("%lld",&a[i]);
    21             C+=a[i];
    22         }
    23         C=C/n;
    24         b[0]=0;
    25         for(int i=1;i<n;i++)
    26         {
    27             b[i]=b[i-1]-C+a[i];
    28         }
    29         sort(b,b+n);
    30         ULL ans=0;
    31         LL mid=b[n/2];
    32         for(int i=0;i<n;i++)
    33         {
    34             ans+=abs(mid-b[i]);
    35         }
    36         printf("%lld
    ",ans);
    37     }
    38     return 0;
    39 }
  • 相关阅读:
    insertSelective和insert的区别?
    @Valid和@BindingResult
    restful的put请求(坑),和HttpServletRequest做参数的作用
    ios网络编程读书笔记
    命令行杂记
    iOS杂记
    git项目收藏
    _Function_,_PRETTY_FUNCTION的区别
    iOS连接收藏
    转自别人的话
  • 原文地址:https://www.cnblogs.com/little-w/p/3341947.html
Copyright © 2020-2023  润新知