欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

均分纸牌

程序员文章站 2022-07-13 13:52:20
...

均分纸牌

洛谷P1031

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

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

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

实现还是比较简单的

#include <iostream>
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,也欢迎指出更多优化方法~

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

相关标签: 洛谷原创题解