3580整数配对—2021/05/27
贪心+哈希
给定 nn 个整数 a1,a2,…,ana1,a2,…,an,nn 为偶数。
现在要将它们两两配对,组成 n2n2 个数对。
aiai 和 ajaj 能够配对,当且仅当 ai=ajai=aj。
每次增加操作可以使其中的任意一个数 aiai 加一。
请问,要使得 nn 个整数能够成功组成 n2n2 个数对,至少要进行多少次增加操作。
输入格式
第一行包含整数 nn。
第二行包含 nn 个整数 a1,a2,…,ana1,a2,…,an。
输出格式
一个整数,表示所需最少操作次数。
数据范围
1≤n≤1051≤n≤105,
1≤ai≤1041≤ai≤104
输入样例1:
6
5 10 2 3 14 5
输出样例1:
5
输入样例2:
2
1 100
输出样例2:
99
AC源码:
#include <bits/stdc++.h>
using namespace std;
const int cmax = 1e5+5;
int a[cmax];
typedef long long ll;
int main()
{
int n;
cin>>n;
int tmp;
int maxflag =-1,minflag=cmax;
for(int i=0;i<n;i++)
{
scanf("%d",&tmp);
a[tmp]++;
a[tmp]%=2;
maxflag=max(maxflag,tmp);
minflag=min(minflag,tmp);
}
int k=maxflag,k1,k2;
int res=0;
while (k>=minflag)
{
if (a[k]!=0)
{
k1=k;
k--;
while (a[k]==0)
{
k--;
}
res+=(k1-k);
}
k--;
}
cout<<res<<endl;
return 0;
}