解析
不难发现每次都应合并最大的一对,从而使局部最优带动整体最优
sort就会很自然的想到
但是问题是合并完之后的新值可能已经不是当前最大了(WA。。qwq)
于是想到每次循环sort一遍,结果n^2logn又超时了。。。
在一位高人的指引下,我学废了赖皮的priority queue(具体见代码)
代码
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<queue>
#include<functional>
#include<vector>
using namespace std;
bool cmp(int x,int y){
return x>y;
}
int main() {
int x,n,k;
priority_queue<int,vector<int>,less<int> >q;//就是这个queue,里面的元素会自动排序
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++){
scanf("%d",&x);
q.push(x);
}
for(int i=1;i<=n-1;i++){
int a,b;
a=q.top();//返回队首元素
q.pop();//弹出队首元素
b=q.top();
q.pop();
a+=b;
a/=k;
q.push(a);//加入元素
}
int ans=q.top();
printf("%d",ans);
return 0;
}