解题思路:
这道题目其实并不简单,但是非常经典。是刚开始接触贪心算法最常见的一道题目。
题目默认是有解的情况,要不然处理起来更加麻烦 。
我们先预处理数据,算出每堆纸牌与平均值的差,然后从头到尾遍历,如果这个差不等于零,把这个差移交下一步处理,同时步数加一
最后输出步数就可以了
下面附上ac代码
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <queue>
#include <set>
#include <map>
#include <vector>
#define dbg(a) cout<<#a<<" : "<<a<<endl;
#define IOS ios_base::sync_with_stdio(false); cin.tie(NULL);
#define PAUSE system("pause")
#define sd(a) scanf("%d",&a)
#define sll(a) scanf("%lld",&a)
#define sdd(a,b) scanf("%d%d",&a,&b)
#define sddd(a,b,c) scanf("%d%d%d",&a,&b,&c)
#define sf(a) scanf("%lf",&a)
#define sff(a,b) scanf("%lf%lf",&a,&b)
#define sfff(a,b,c) scanf("%lf%lf%lf",&a,&b,&c)
using namespace std;
typedef long long ll;
typedef pair<int,int> pr;
const int maxn=110;
int n;
int a[maxn];
int main()
{
sd(n);
int avg=0;
for(int i=1;i<=n;i++)
{
sd(a[i]);
avg+=a[i];
}
avg/=n;
int ans=0;
for(int i=1;i<=n;i++)
{
a[i]-=avg;
}
for(int i=1;i<=n;i++)
{
if(a[i]!=0){
ans++;
a[i+1]+=a[i];
}
else{
continue;
}
}
printf("%d\n",ans);
//PAUSE;
return 0;
}