解析
不难发现每次都应合并最大的一对,从而使局部最优带动整体最优
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;
}