您的位置:首页 > 其它

51nod 1596 搬货物

2017-07-25 22:58 267 查看
先全都扔到优先队列里(最小堆),然后出队最小的两个,如果相等的话,合成一个新的再扔到队列里。如果不相等,则把出队那两个其中较小的扔一个单独的数组array里,另一个大一点的再扔回队列里,直到队列为空。array的尺寸就是结果。

我做的时候最后一个没再放回队列,所以是array.size()+1

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main()
{
ios::sync_with_stdio(false);
LL n;
LL good;
cin >> n;
priority_queue<LL,vector<LL>,greater<LL>> que;
vector<LL> remain;
while(n--)
{
cin >> good;
que.push(good);
}
LL a,b;
while(!que.empty())
{
a = que.top();
que.pop();
if(que.empty())
{
que.push(a);
break;
}
b = que.top();
if(a == b)
{
que.pop();
que.push(a+1);
}
else
remain.push_back(a);
}

cout << remain.size()+1 << endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: