Uva11300(数学)

http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33899

总结:对于最优值得推导我们可以先进行数学推导,很多时候能将他化简。

定理:给定数轴上的n个点,在数轴上所有点中,中位数离所有顶点的距离之和最小。所有能转化为这个模型的题都可以中位数定理来解决。

AC:


#include <algorithm>
#include <string>
#include <iostream>
#include <string.h>
#include<stdio.h>
using namespace std;
#define maxn 1000008
#define ll  long long int
ll a[maxn],tot,M;
int main()
{
    int n;
    while(scanf("%d",&n)==1)
    {
        tot=0;
        for(int i=1;i<=n;i++)
        {
            scanf("%lld",&a[i]);
            tot+=a[i];
        }
        M=tot/n;
        a[0]=0;
        for(int i=1;i<n;i++) a[i]=a[i-1]+a[i]-M;
        sort(a,a+n);
        ll x1=a[n/2],ans=0;
        for(int i=0;i<n;i++)
        {
            ans+=abs(x1-a[i]);
        }
        printf("%lld\n",ans);


    }
    return 0;
}

你可能感兴趣的:(Uva11300(数学))