题目描述
铁子最近犯上了强迫症,他总是想要把一个序列里的元素变得两两不同,而他每次可以执行一个这样的操作,他可以选择序列里的任意两个元素相加,不妨记作ai和aj,然后把ai+aj放进序列里,再删掉ai和aj其中的随便一个,问最少操作多少次可以完成铁子的愿望?
输入描述:
第一行一个整数n表示序列的长度(1≤n≤105)
第二行n个整数ai表示序列的每个整数(1≤ai≤109)
输出描述:
输出一行表示答案
示例1
输入
3
1 2 2
输出
1
说明
将序列的第1个整数和序列的第2个整数相加,再删掉第2个整数。
#include <iostream> #include <map> using namespace std; int main() { map<int,int> p; int t, x; cin>>t; while(t--) { cin>>x; p[x]++; } map<int,int>::iterator it = p.begin(); long long s = 0; while(it != p.end()) { if(it->second > 1) { s += it->second - 1; } it++; } cout<<s<<endl; return 0; }