模拟一下即可,每次取最大的元素
然后学到了c++map的访问最后一个元素(即最大的元素)用法
auto x = mp.end(); x --; // x->first 即为最大的元素值,x->second 即为该元素的个数 // 注意 x 是指针,所以访问要用 ->
#include <bits/stdc++.h>
#include <queue>
using namespace std;
int main() {
int n;
cin >> n;
int mn = 1e9 + 10;
map<int, int> mp;
for (int i = 0; i < n; i ++) {
int x;
cin >> x;
mp[x] ++;
mn = min(mn, x);
}
long long ans = 0;
while (mp.size() > 1) {
auto x = mp.end();
x --;
mp.erase(x->first);
ans += x->second;
mp[x->first / 2] += x->second;
}
cout << ans;
}
// 64 位输出请用 printf("%lld")

京公网安备 11010502036488号