#include<bits/stdc++.h> using namespace std; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n; cin >> n; int znaczki[n]; for(int i = 0; i < n; i++){ cin >> znaczki[i]; } sort(znaczki, znaczki + n); int poprzednia_wartosc; poprzednia_wartosc = 0; vector <long long> ilosci; int x = -1; for(int i = 0; i < n; i++){ if(znaczki[i] == poprzednia_wartosc){ ilosci[x] += 1; } else{ x += 1; ilosci.push_back(1); poprzednia_wartosc = znaczki[i]; } } ilosci.push_back(2000000000); int wynik = 0; int w; vector <long long> wziete; for(int d = 0; d <= x; d++){ wziete.push_back(0); } int wyniki[n]; for(int i = n; i > 0; i--){ for(int d = 0; d < x + 1; d++){ if(wziete[d]){ ilosci[d] += wziete[d]; wynik -= wziete[d]; wziete[d] += ilosci[d] / i; wynik += ilosci[d] / i * i; ilosci[d] -= ilosci[d] / i * i; } else{ if(ilosci[d] == i){ wziete[d] = 1; wynik += i; ilosci[d] -= i; } }} wyniki[i - 1] = wynik; } for(int i = 0; i < n; i++){ cout << wyniki[i] << ' '; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #include<bits/stdc++.h> using namespace std; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n; cin >> n; int znaczki[n]; for(int i = 0; i < n; i++){ cin >> znaczki[i]; } sort(znaczki, znaczki + n); int poprzednia_wartosc; poprzednia_wartosc = 0; vector <long long> ilosci; int x = -1; for(int i = 0; i < n; i++){ if(znaczki[i] == poprzednia_wartosc){ ilosci[x] += 1; } else{ x += 1; ilosci.push_back(1); poprzednia_wartosc = znaczki[i]; } } ilosci.push_back(2000000000); int wynik = 0; int w; vector <long long> wziete; for(int d = 0; d <= x; d++){ wziete.push_back(0); } int wyniki[n]; for(int i = n; i > 0; i--){ for(int d = 0; d < x + 1; d++){ if(wziete[d]){ ilosci[d] += wziete[d]; wynik -= wziete[d]; wziete[d] += ilosci[d] / i; wynik += ilosci[d] / i * i; ilosci[d] -= ilosci[d] / i * i; } else{ if(ilosci[d] == i){ wziete[d] = 1; wynik += i; ilosci[d] -= i; } }} wyniki[i - 1] = wynik; } for(int i = 0; i < n; i++){ cout << wyniki[i] << ' '; } } |