zoukankan      html  css  js  c++  java
  • USACO月赛2005 january volume

    2013-09-18 08:12

    由题可知,ans=∑i  ∑j(x[i]-x[j])

    最后整理完之后应该是不同系数的X[i]相加,所以这道题就成了求不同x[i]的系数

    对于X[i],它需要减前面(i-1)个不同的数,所以系数先是(i-1),而计算它前

    面的每个数时都需要被X[i]减,所以系数成了2*(i-1),而且X[i]会被后面(n-i)

    个数减,且计算后面的x时,都会减x[i],所以需要减2*(n-i)所以系数就变成了

    2*(2*i-n-1),累加每个即可

    //By BLADEVIL
    var
        n                       :longint;
        i, j                    :longint;
        x                       :array[0..10010] of int64;
        ans                     :int64;
    
    procedure swap(var a,b:int64);
    var
        c                       :longint;
    begin
        c:=a; a:=b; b:=c;
    end;
    
    procedure qs(low,high:longint);
    var
        i, j, xx                :int64;
    begin
        i:=low; j:=high; xx:=x[(i+j) div 2];
        while i<j do
        begin
            while x[i]<xx do inc(i);
            while x[j]>xx do dec(j);
            if i<=j then
            begin
                swap(x[i],x[j]);
                inc(i); dec(j);
            end;
        end;
        if i<high then qs(i,high);
        if j>low then qs(low,j);
    end;
    
    
    begin
        assign(input,'volume.in'); reset(input);
        assign(output,'volume.out'); rewrite(output);
        read(n);
        for i:=1 to n do read(x[i]);
        qs(1,n);
        j:=n;
        for i:=n downto 1 do ans:=ans+(2*(i-1)-2*(n-i))*x[i];
        writeln(ans);
        close(input); close(output);
    end.
  • 相关阅读:
    在C#中使用正则表达式
    C++流操纵算子(格式控制)
    linux(Fedora) doxygen 的安装和使用
    UTF8
    java cookie全解析
    Fedora16 安装Adobe Flash Player方法
    工程素养
    感悟数据封装
    谷歌如何保护隐私
    openCV画的词法分析图
  • 原文地址:https://www.cnblogs.com/BLADEVIL/p/3433507.html
Copyright © 2011-2022 走看看