CCPC-Wannafly Winter Camp Day 5(Div 2,onsite)C Division貪欲
5845 ワード
問題解
最大の数字を選択するたびに2を除いて最大収益を得る優先キューストレージを使用して最大値を選択した後、キューkの範囲に追加して1 e 9以内で最大1 e 5の数字を1 e 9まで追加するので、最大nlogv回で数値を0にすることができます.
ACコード
最大の数字を選択するたびに2を除いて最大収益を得る優先キューストレージを使用して最大値を選択した後、キューkの範囲に追加して1 e 9以内で最大1 e 5の数字を1 e 9まで追加するので、最大nlogv回で数値を0にすることができます.
ACコード
#include
#include
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
int main()
{
#ifdef LOCAL
freopen("C:/input.txt", "r", stdin);
#endif
int n, k, x;
cin >> n >> k;
priority_queue<int> pq;
for (int i = 0; i < n; i++)
{
scanf("%d", &x);
pq.push(x);
}
while (pq.top() != 0 && k) // 0
{
int f = pq.top();
pq.pop();
f /= 2;
pq.push(f);
k--;
}
ll ans = 0;
while (!pq.empty())
ans += pq.top(), pq.pop();
cout << ans << endl;
return 0;
}