#include <iostream> #include <map> using namespace std; int *pom; void merge(int tab[], int left, int midd, int right) { int i, j; for(i = midd + 1; i>left; i--){ pom[i-1] = tab[i-1]; } for(j = midd; j<right; j++) pom[right+midd-j] = tab[j+1]; for(int k=left;k<=right;k++) if(pom[j]>pom[i]) tab[k] = pom[j--]; else tab[k] = pom[i++]; } void mergeSort(int tab[],int left, int right) { if(right<=left) return; int midd = (right+left)/2; mergeSort(tab, left, midd); mergeSort(tab, midd+1, right); merge(tab, left, midd, right); } int main(int argc, char *argv[]) { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); map<int, int> mp; int n, kapusta; cin>>n; for (int i=0; i<n; i++) { cin>>kapusta; mp[kapusta]++; } int ile_roznych = mp.size(); pom = new int[ile_roznych]; int sortowanie[ile_roznych]; map<int, int>::iterator it = mp.begin(); int tmp = 0; while (it != mp.end()) { sortowanie[tmp] = it->second; tmp++; ++it; } mergeSort(sortowanie, 0, ile_roznych - 1); cout<<n<<" "; int a, aktu_suma; for (int i=2; i<=n; i++) { aktu_suma = 0; for (int j=0; j<ile_roznych; j++) { a = sortowanie[j] / i; if (a == 0) { break; } a *= i; aktu_suma += a; } cout << aktu_suma << " "; if (aktu_suma == 0) { i++; while (i<=n) { cout<<"0 "; i++; } } //a = sortowanie[i-1] / i; //a *= i; } 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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | #include <iostream> #include <map> using namespace std; int *pom; void merge(int tab[], int left, int midd, int right) { int i, j; for(i = midd + 1; i>left; i--){ pom[i-1] = tab[i-1]; } for(j = midd; j<right; j++) pom[right+midd-j] = tab[j+1]; for(int k=left;k<=right;k++) if(pom[j]>pom[i]) tab[k] = pom[j--]; else tab[k] = pom[i++]; } void mergeSort(int tab[],int left, int right) { if(right<=left) return; int midd = (right+left)/2; mergeSort(tab, left, midd); mergeSort(tab, midd+1, right); merge(tab, left, midd, right); } int main(int argc, char *argv[]) { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); map<int, int> mp; int n, kapusta; cin>>n; for (int i=0; i<n; i++) { cin>>kapusta; mp[kapusta]++; } int ile_roznych = mp.size(); pom = new int[ile_roznych]; int sortowanie[ile_roznych]; map<int, int>::iterator it = mp.begin(); int tmp = 0; while (it != mp.end()) { sortowanie[tmp] = it->second; tmp++; ++it; } mergeSort(sortowanie, 0, ile_roznych - 1); cout<<n<<" "; int a, aktu_suma; for (int i=2; i<=n; i++) { aktu_suma = 0; for (int j=0; j<ile_roznych; j++) { a = sortowanie[j] / i; if (a == 0) { break; } a *= i; aktu_suma += a; } cout << aktu_suma << " "; if (aktu_suma == 0) { i++; while (i<=n) { cout<<"0 "; i++; } } //a = sortowanie[i-1] / i; //a *= i; } return 0; } |