码迷,mamicode.com
首页 > 编程语言 > 详细

UVa11300——算法竞赛入门经典训练指南

时间:2015-05-07 00:33:21      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:

(xl)LT1-3

这道题还是比较考验数学水平,由于所有的交换仅限于相邻两个人之间的交换,所以容易列n-1个方程组,要注意到这是一个环,所以第n个方程是可以被推导出来所以不能算作有效的方程组,即使无法解出所有的值,但是我们注意到,只要求一个最小值,那么这种求极值问题,就可以通过x1一个变量来表示所有的,即消元完成。这样转化为“单变量极值问题”。

然后就是显然的坐标上求啊求。。。再用显然的中位数就可解了。

然而编程的时候就是恶心,我一直以为我的式子可能错了,然而问题竟然是tot没有初始化,恶心啊恶心啊。。。所以一定要初始化一定要初始化!!!

附上代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
//#include<cmath>

using namespace std;

const int maxn=1000000+100;

long long a[maxn],c[maxn];

int main()
{
    int n;
    while(scanf("%d",&n)==1){
        long long tot=0;                //初始化,否则会生成一个固定的随机值。。。坑爹啊 
        for(int i=1;i<=n;i++){
            scanf("%lld",&a[i]);
            tot+=a[i];
        }
        long long ave=tot/n;
        c[0]=0;
        for(int i=1;i<n;i++){
            c[i]=c[i-1]+ave-a[i+1];
//            cout<<"C "<<i<<" :"<<c[i]<<endl;
        }
        sort(c,c+n);
        long long mid=c[n/2];
        long long ans=0;
        for(int i=0;i<n;i++)ans+=abs(mid-c[i]);
        printf("%lld\n",ans);
    }
    return 0;
}

在看书的时候发现了这样一个问题。fabs和abs区别是什么?需要什么库呢?似乎abs不需要额外的库。

库是不同的,然而其实只要加载cmath库,就都可以用了,他们区别在于fabs是浮点型,abs是整型(注意,取绝对值后再取整)。

 

UVa11300——算法竞赛入门经典训练指南

标签:

原文地址:http://www.cnblogs.com/happyJimmyLin/p/4483442.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!