51nod 1596 搬货物

来源:互联网 发布:淘宝该怎么做 编辑:程序博客网 时间:2024/06/07 23:47

先全都扔到优先队列里(最小堆),然后出队最小的两个,如果相等的话,合成一个新的再扔到队列里。如果不相等,则把出队那两个其中较小的扔一个单独的数组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;}
原创粉丝点击