#include<cstdio> #include<vector> using namespace std; int main() { long n; scanf("%ld\n", &n); vector<long> coins(n); long max_val = 0l; for (long i = 0; i < n; i++) { scanf("%ld", &coins[i]); if (coins[i] > max_val) { max_val = coins[i]; } } vector<long> buckets(max_val + 1, 0); for (long i = 0; i < n; i++) { buckets[coins[i]]++; } for (long i = 0; i < max_val; i++) { long h_coins_num = buckets[i] / 2; buckets[i + 1] += h_coins_num; buckets[i] -= h_coins_num * 2; } long i = max_val; while (i >= 0 && buckets[i] == 0) { i--; } long result = 0l; if (i >= 0) { long coin_val = i; long coin_num = buckets[i]; while (coin_num > 1) { coin_num /= 2; coin_val++; } result = coin_val; } printf("%ld\n", result); 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 | #include<cstdio> #include<vector> using namespace std; int main() { long n; scanf("%ld\n", &n); vector<long> coins(n); long max_val = 0l; for (long i = 0; i < n; i++) { scanf("%ld", &coins[i]); if (coins[i] > max_val) { max_val = coins[i]; } } vector<long> buckets(max_val + 1, 0); for (long i = 0; i < n; i++) { buckets[coins[i]]++; } for (long i = 0; i < max_val; i++) { long h_coins_num = buckets[i] / 2; buckets[i + 1] += h_coins_num; buckets[i] -= h_coins_num * 2; } long i = max_val; while (i >= 0 && buckets[i] == 0) { i--; } long result = 0l; if (i >= 0) { long coin_val = i; long coin_num = buckets[i]; while (coin_num > 1) { coin_num /= 2; coin_val++; } result = coin_val; } printf("%ld\n", result); return 0; } |