#include <iostream> #include<algorithm> using namespace std; int main() { int nn; cin >> nn; int const n = nn; int z[n]; for(int i=0; i<n; i++) //przyjmowanie i sortowanie danych { cin >> z[i]; } sort(z, z + n); int zdo=0, l=0, ol, pl; //zdo- znaczki do oddania, ol - obecna liczba, pl - potencjalna liczba for(int o=1; o<=n; o++) // przechodzenie przez osoby { if(o==1) { cout << n << ' '; continue; } else { zdo=0; for(int i=0; i<n; i++) // przez znaczki { int c = i+1; l=1; ol=z[i]; pl=z[c]; while(pl==ol) { l++; c++; pl=z[c]; } if(l>=o) { if(l%o==0) zdo = zdo + l; else zdo = zdo + (l-(l%o)); } if(l>1) i= i+l-1; } } cout << zdo; if(o!=n) cout << ' '; } return 0; }
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 | #include <iostream> #include<algorithm> using namespace std; int main() { int nn; cin >> nn; int const n = nn; int z[n]; for(int i=0; i<n; i++) //przyjmowanie i sortowanie danych { cin >> z[i]; } sort(z, z + n); int zdo=0, l=0, ol, pl; //zdo- znaczki do oddania, ol - obecna liczba, pl - potencjalna liczba for(int o=1; o<=n; o++) // przechodzenie przez osoby { if(o==1) { cout << n << ' '; continue; } else { zdo=0; for(int i=0; i<n; i++) // przez znaczki { int c = i+1; l=1; ol=z[i]; pl=z[c]; while(pl==ol) { l++; c++; pl=z[c]; } if(l>=o) { if(l%o==0) zdo = zdo + l; else zdo = zdo + (l-(l%o)); } if(l>1) i= i+l-1; } } cout << zdo; if(o!=n) cout << ' '; } return 0; } |