[NOIP提高組2002]均分紙牌
阿新 • • 發佈:2019-02-05
問題描述:
有 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);
}