#include #include #include #include #include #include #include int findbig(int *a, int n){ int i; int big = -1; for(i = 0; i < n; i++){ if(a[i] > big){ big = a[i]; } } return big; } void radixSort(int *a, int n){ int i; int tmp[n]; int digit = 1; int big = findbig(a, n); while (big / digit > 0){ int count[10] = { 0 }; for (i = 0; i < n; i++){ count[(a[i] / digit) % 10]++; } for (i = 1; i < 10; i++){ count[i] += count[i - 1]; } for (i = n - 1; i >= 0; i--){ tmp[--count[(a[i] / digit) % 10]] = a[i]; } for (i = 0; i < n; i++){ a[i] = tmp[i]; } digit *= 10; } } int main(){ int n; int i = 0; long int dist = 1; long int miles = 0; scanf("%d",&n); int *calories = malloc(sizeof(int) * n); for(int calories_i = 0; calories_i < n; calories_i++){ scanf("%d",&calories[calories_i]); } radixSort(calories, n); i = n-1; while (i >= 0){ miles += calories[i] * dist; dist *= 2; i--; } printf("%ld", miles); return 0; }