均分纸牌

均分纸牌

洛谷P1031

均分纸牌_第1张图片
乍一看到,可能会很蒙 移到左右都行?!
但是细想一下,其实 “可以移到相邻左边或右边的堆上“这句话是没啥用的

Because
四堆纸牌,第一堆只能挪到第二堆,那么接下来,任何事情就与第一堆没关系了,因为它的数量已经满足了!那么就可以把第一堆“删掉”,第二堆就变成了第一堆!接下来上述再循环一遍…也就是说,所有的牌 只可能向右边挪!
那接下来就简单了

  1. 求出平均数
  2. 算出当前的数与平均数差多少
  3. 挪到右边
  4. 完美结束

实现还是比较简单的

#include 
using namespace std;
int n,average=0,ans=0;
int a[10005];
int main ()
{
     
    cin >> n;
    for (int i=0;i<n;i++)
    {
     
        cin >> a[i];
        average+=a[i];
    }
    average/=n;
    for (int i=0;i<n;i++)
        a[i]-=average;
    for (int i=0;i<n;i++)
    {
     
        if (a[i]!=0)
        {
     
            a[i+1]+=a[i];
            ans++;
        }
    }
    cout << ans;
}

此题解已AC,也欢迎指出更多优化方法~

❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀❀

你可能感兴趣的:(洛谷原创题解)