zoukankan      html  css  js  c++  java
  • Bzoj1045:[HAOI2008] 糖果传递

    题目链接
    题意很清晰了。。
    做法大概是求出每个人需要或者多余的数量,再转成前缀和,排一下序找出中位数,答案就是每个数与中位数的距离和了。。
    证明也很容易看懂,只是真正拿到题目的时候怎么思考? Orz会数学的大神求指点。。。
    【Code】
    var
      i:longint;
      k,n,ans,ave:int64;//小小的坑点,要注意数据范围。。
      a:array[0..10000000]of int64;
      sum:Array[0..10000000]of int64;
    procedure qsort(l,r:longint);
    var i,j,t,mid:longint;
    begin
      i:=l;j:=r; mid:=sum[(i+j)div 2];
      repeat
        while sum[i]
        while sum[j]>mid do dec(j);
        if i<=j then begin
          t:=sum[i];sum[i]:=sum[j];sum[j]:=t;
          inc(i);dec(j);
        end;
      until i>j;
      if l
      if i
    end;
    begin
      readln(n);
      sum[0]:=0;
      for i:=1 to n do begin
        readln(a[i]);
        sum[i]:=sum[i-1]+a[i];
      end;
      ave:=sum[n] div n;
      for i:=1 to n do
        sum[i]:=sum[i]-i*ave;
      qsort(1,n);
      ans:=0;
      k:=sum[(n+1)div 2];
      for i:=1 to n do
        ans:=ans+abs(sum[i]-k);
      writeln(ans);
    end.

  • 相关阅读:
    wtforms 钩子函数
    sqlalchemy 单表增删改查
    sqlalchemy 数据库操作
    flask wtforms组件
    python----------文件操作
    编码 编码的转化
    集合、深浅copy
    字典
    sort 、sorted、range、join方法 数字的正序、倒叙、翻转
    for循环
  • 原文地址:https://www.cnblogs.com/vincent-hwh/p/5990335.html
Copyright © 2011-2022 走看看