そのトピックは割り切れできるカード(N | T)の可解総数を保証するそれぞれの人がカード[1] ... [m]を保持し、我々は最初の男を考慮することができます
1. [1]> T / M、最初の人への第2の人が必要な場合は、C [1] -T /カードのM、すなわち、C [2]に加えC [1] -T / M.
2. [1] <T / Mは、最初の人は二人cを取る必要がある場合は、[1] -T /カードのM、すなわち、C [2] Tを減算し/ MC [1]。
我々は、この方法に従って、2〜Mの個々を考慮することが変えることができます。一定の時間がC [I]を持っている場合であっても、次に[i]は[I + 1]は、Cからカードを取ることになるcがあるため、重要ではありません負の数に減少しています。
コード
#include<bits/stdc++.h>
using namespace std;
int m,a[105],T,ans;
int main(){
scanf("%d",&m);
for(int i=1;i<=m;++i){
scanf("%d",&a[i]);
T+=a[i];
}
T/=m;
for(int i=1;i<=m;++i){
a[i]-=T;
}
for(int i=1;i<=m;++i){
if(a[i]!=0){
a[i+1]+=a[i];
ans++;
}
}
printf("%d",ans);
return 0;
}
あなたは1枚のカードだけを取ることができれば、アイデアは上記と同じである。この問題にも発展することができ、ステップの最小数であります
$ \ Sum_ {i = 1} ^ M $ $ \中間$ iがT / MGを* [i]は$ \中間$、Gプレフィックスであり、G [I] = $ \ sum_ {J = 1}は前記^私は[I]を$
ここで、「接頭辞」最初にGのそれぞれの意味は[i]はトランプをし、最終的にそこに私はT / Mのトランプを*。
我々が設定されている場合は、[I] [I] -T / M、最初、つまり一人一人の手にあるカードの枚数がマイナスT / Mであり、最終的にはすべての人間の手が0のカードを持っている、答えはまだですが=変わらない、つまり、
$ \ Sum_ {i = 1} ^ M $ $ \中間$ S [i]は$ \中間$ Sのプレフィックスと、すなわち、S A [I] = $ \ sum_ {J = 1} ^ I $ A [Iであります]