题解 P1031 【均分纸牌】

· · 题解

#include <bits/stdc++.h>
using namespace std;
int main(){
    int n,ave = 0,step = 0,i,j;
    int a[10005];
    cin >> n;
    for(i = 1; i <= n; i++){
        cin >> a[i];
        ave += a[i];//读入各堆牌张数,求总张数ave 
    }
    ave /= n;//求牌的平均张数ave
    for(i = 1; i <= n; i++)
        a[i] -= ave;//每堆牌的张数减去平均数
    i = 1;
    j = n;
    while(a[i] == 0 && i < n)
        i++;//过滤左边的0
    while(a[j] == 0 && j > 1)
        j--;//过滤右边的0
    while(i < j){
        a[i + 1] += a[i];//将第i堆牌移到第i + 1堆中去
        a[i] = 0;//第i堆牌移走后变为0
        step++;//移牌步数计数
        i++;//对下一堆牌进行循环操作
        while(a[i] == 0 && i < j)
            i++;//过滤移牌过程中的0 
    }
    cout << step << endl;
    return 0;
}