怎么样才能达到最小步数呢,统计一下大于2的数量,和数量等于1的数量,然后将大于二的
变成等于1的id,有一种特殊情况需要处理,就是大于2的数量大于等于1的数量,这时候需要变化的次数就是大于2的个数
res1(大于二的数量)+(res2 - res1) / 2(处理完后还是没有达到2的数量)
res1>res2时,ans=res1;
#include <iostream>
#include <map>
using namespace std;
int main()
{
int n;
cin >> n;
map<int, int> mp;
int res1 = 0, res2 = 0;
while (n--)
{
int id;
cin >> id;
if (mp[id] < 2)
mp[id]++;
else
res1++;
}
for (auto t :mp)
{
if(t.second==1) res2++;
}
if(res1>res2)//没有考虑到这种情况,只过了60%
cout<<res1<<endl;
else
cout << res1+(res2 - res1) / 2 << endl;
return 0;
}