zoukankan      html  css  js  c++  java
  • 洛谷 p1031

    可以先算平均值,然后计算每一个堆和平均值的差距,将这些差距值存在另一个数组里,从小到大遍历这个数组,若不为0则把它的值加到下一个元素里,然后次数加一。这相当于每次将这一个堆的帐记到下一个堆里面,这样就只用一路往数组右边前进,不用考虑某个大于平均值的堆要怎样往左右分配,我不太知道这种思想算什么思想,可能是减治思想,值得借鉴

    #include<stdio.h>
    
    int main(void){
        int n;
        scanf("%d", &n);
        int heap[n];
        int give[n];
        int sum=0, avg;
        for(int i=0; i<n; i++)
            give[i] = 0;
        for(int i=0; i<n; i++){
            scanf("%d", &heap[i]);
            sum += heap[i];
        }
        avg = sum/n;
        for(int i=0; i<n; i++){
            give[i] = heap[i] - avg;
        }
        int steps=0;
        for(int i=0; i<n-1; i++){
            if(give[i] != 0){
                give[i+1] += give[i];
                steps++;
            }
        }
        printf("%d", steps);
        return 0;
    }
  • 相关阅读:
    [NoiPlus2016]换教室
    [HNOI2013]游走
    [Noi2002]Savage
    [SDOI2010]古代猪文
    [JSOI2008]最小生成树计数
    [SCOI2010] 连续攻击游戏
    文艺平衡树
    指针FHQTreap
    HAOI2007 上升序列
    HNOI2008 玩具装箱
  • 原文地址:https://www.cnblogs.com/ssNiper/p/11125285.html
Copyright © 2011-2022 走看看