P9421题解
这个题目,写一个桶就好了,首先,输入
最后因为是修改,所以只要将
#include<bits/stdc++.h>
using namespace std;
int a[100010],b[100010],sum;// a 数组表示每个学生的 id ,b数组表示每个 id 出现了几次,sum 表示存储需要更改的 id 数 。
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
b[a[i]]++; //将 b 的第 a[i] 项增加 1。
}
for(int i=0;i<=n;i++)
{
if(b[i]==1) //如果 b[i] 等于 1。
sum++; //那么需要修改的次数就增加 1 次。
if(b[i]>2) //如果 b[i] 大于 2。
sum+=b[i]-2; //那么需要修改的次数就增加 b[i]-2 次。
}
for(int i=0;i<=n;i++) //注意,序号是在 n 以内,所以要小于等于。
if(b[i]-2==sum)
{
cout<<sum; //如果所有学生数字都一样,那么就直接输出 sum。
return 0;
}
cout<<sum/2; //否则就输出 sum/2。
return 0;
}