NOIP2002 [グループを改善]問題のカード共有ソリューション

フェイス質問

そのトピックは割り切れできるカード(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であります]

おすすめ

転載: www.cnblogs.com/donkey2603089141/p/11414580.html