zoukankan      html  css  js  c++  java
  • BZOJ1045:[HAOI2008]糖果传递(贪心)

    Description

    有n个小朋友坐成一圈,每人有ai个糖果。每人只能给左右两人传递糖果。每人每次传递一个糖果代价为1。

    Input

    第一行一个正整数nn<=1'000'000,表示小朋友的个数.
    接下来n行,每行一个整数ai,表示第i个小朋友得到的糖果的颗数.

    Output

    求使所有人获得均等糖果的最小代价。

    Sample Input

    4
    1
    2
    5
    4

    Sample Output

    4

    Solution

    emmm今天好颓啥都不想干怕不是省选后遗症
    自己独立思考的能力还是不够,这也是我省选只能打暴力的原因……
    还是要多练啊
    https://www.cnblogs.com/CtrlCV/p/5626194.html 这个题解讲的还是很好的
    让我这个有公式恐惧症的人都看懂了

    Code

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<cstdlib>
     5 #include<algorithm>
     6 #define N (1000000+100)
     7 using namespace std;
     8 
     9 long long n,ave,ans,a[N],s[N];
    10 
    11 int main()
    12 {
    13     scanf("%lld",&n);
    14     for  (int i=1;i<=n;++i)
    15         scanf("%lld",&a[i]),ave+=a[i];
    16     ave/=n;
    17     for (int i=1;i<=n;++i)
    18         s[i]=s[i-1]+a[i]-ave;
    19     sort(s+1,s+n+1);
    20     for (int i=1;i<=n;++i)
    21         ans+=abs(s[i]-s[n/2+1]);
    22     printf("%lld",ans);
    23 }
  • 相关阅读:
    判断无向图G是否连通
    图的深度优先搜索与广度优先搜索
    整数变换问题
    按层次遍历二叉树
    交叉链表
    二元查找树转换成一个排序的双向链表
    简单计算器的实现
    二叉树宽度的计算
    BMP文件的读取与显示
    约瑟夫环问题
  • 原文地址:https://www.cnblogs.com/refun/p/8746984.html
Copyright © 2011-2022 走看看