[中礦大學程序設計學科競賽]G畢業生的紀念禮物(priority_queue用法)

鏈接
分析:用一個優先隊列模擬。

priority_queue<int,vector<int>,greater<int> > que;  //從小到大
priority_queue<int,vector<int>,less<int> > que;		//從大到小
#include<iostream>
#include<queue>
#include<map>
using namespace std;
int n;
map<int,int> mp;
map<int,int>::iterator ite;
priority_queue<int> que;
int main()
{
    std::ios::sync_with_stdio(false);
    int cnt=0;
    cin>>n;
    for(int i=0;i<n;i++){
        int x;
        cin>>x;
        mp[x]++;
    }
    while(!que.empty()) {que.pop();}
    for(ite=mp.begin();ite!=mp.end();++ite){
        que.push(ite->second);
    }
    while(que.size()>=3){
        int aa=que.top();
        que.pop();
        int bb=que.top();
        que.pop();
        int cc=que.top();
        que.pop();
        aa--;
        bb--;
        cc--;
        cnt++;
        if(aa){que.push(aa);}
        if(bb){que.push(bb);}
        if(cc){que.push(cc);}
    }
    cout<<cnt<<endl;
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章