鏈接
分析:用一個優先隊列模擬。
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;
}