自己写的实现,未采用用空间换时间的方案,采用了排序的方式,效率不高,仅供参考
#include<iostream>
#include<vector>
#include<map>
#include "math.h"
using namespace std;
int main()
{
int N;
cin>>N;
int i = 0;
map<int,vector<int> > groups;
for(;i<N;i++)
{
int tempt;
cin>>tempt;
groups[abs(tempt)].push_back(tempt);
}
map<int,vector<int> >::iterator iter = groups.begin();
int count = 0;
for(;iter != groups.end();iter++)
{
//std::cout<<"first"<<iter->first<<"size"<<(iter->second).size()<<std::endl;
if((iter->second).size()<=1)
continue;
else
{
int len = (iter->second).size();
int value = iter->first;
int sum = value*len;
vector<int>::iterator iter1 = (iter->second).begin();
int sumreal = 0;
for(;iter1!= (iter->second).end();++iter1)
sumreal += *iter1;
//std::cout<<sum<<" df "<<sumreal<<std::endl;
count += (sum - sumreal)/(2*(iter->first));
}
}
std::cout<<count;
}