uva 11300(代数分析)

算法竞赛入门经典训练指南第5页,已经说的很清楚了,我就是把他说的不用存A数组的方案实现一下

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
ll ans;
const int maxn=1000000+10;
int c[maxn];
int n;
int main()
{
    while(~scanf("%d",&n))
    {
        ll sum=0;
        c[0]=0;//x1-0,即x1
        ll a;
       for(int i=1;i<=n;i++)
       {
           scanf("%lld",&a);
           sum+=a;
           c[i]=c[i-1]+a;
       }
       ll m=sum/n;
       for(int i=1;i<n;i++)
         c[i]-=m*i;
         sort(c,c+n);
    ll x1=c[(n-1)/2];
      ans=0;
      for(int i=0;i<n;i++)
      {
          ans+=abs(x1-c[i]);
      }
      printf("%lld\n",ans);
    }
    return 0;
}

 

posted on 2017-08-05 10:39  发牌员  阅读(135)  评论(0)    收藏  举报

导航