牛客小白月赛4 J强迫症


题目描述

铁子最近犯上了强迫症,他总是想要把一个序列里的元素变得两两不同,而他每次可以执行一个这样的操作,他可以选择序列里的任意两个元素相加,不妨记作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;
}

猜你喜欢

转载自blog.csdn.net/adusts/article/details/80715522