Codeforces Round 977 (Div. 2, based on COMPFEST 16 - Final Round) c
题面描述:
给你一个数组,你有以下操作:
选择一对 ( i , j ) (i,j) (i,j),将 ⌊ a i + a j 2 ⌋ \lfloor \frac{a_i+a_j}{2} \rfloor ⌊2ai+aj⌋加入到数组中,并删除 a i , a j a_i,a_j ai,aj,让你求可能操作后最大剩下的那个数
思路:
每次对两个最小的数进行操作,可以使用优先队列维护
代码:
#include <bits/stdc++.h>
using namespace std;
#define int long long int
signed main()
{
int T;
cin >> T;
while (T--)
{
int n;
cin >> n;
priority_queue<int, vector<int>, greater<int>> q1;
for (int i = 1; i <= n; i++)
{
int x;
cin >> x;
q1.push(x);
}
while (q1.size() >= 2)
{
int a1 = q1.top();
q1.pop();
int a2 = q1.top();
q1.pop();
q1.push((a1 + a2) / 2);
}
cout << q1.top() << endl;
}
return 0;
}