1. 程式人生 > >[NOIP提高組2002]均分紙牌

[NOIP提高組2002]均分紙牌

問題描述:
有 N 堆紙牌,編號分別為 1,2,…, N。每堆上有若干張,但紙牌總數必為 N 的倍數。可以在任一堆上取若於張紙牌,然後移動。

移牌規則為:在編號為 1 堆上取的紙牌,只能移到編號為 2 的堆上;在編號為 N 的堆上取的紙牌,只能移到編號為 N-1 的堆上;其他堆上取的紙牌,可以移到相鄰左邊或右邊的堆上。

現在要求找出一種移動方法,用最少的移動次數使每堆上紙牌數都一樣多。
輸入:
N(N 堆紙牌,1 <= N <= 100)
A1 A2 … An (N 堆紙牌,每堆紙牌初始數,l<= Ai <=10000)
輸出:
所有堆均達到相等時的最少移動次數。

題解:
這道題直接模擬就好了,對於i,如果它不等於平均數,則方案數加一,同時如果它低於平均數就向i+1要,如果高於就給i+1

#include<cstdio>
#include<cstdlib>
#include<cstring>
int n,sum=0;
int a[103]; 
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    scanf("%d",&a[i]),sum+=a[i];
    sum/=n;
    int ans=0;
    for(int i=1;i<=n;i++)a[i]-=sum;
    for(int i=1;i<n;i++)
    {
        if
(a[i]!=0) { a[i+1]+=a[i]; ans++; } } printf("%d\n",ans); }