0
点赞
收藏
分享

微信扫一扫

极客争锋 智连未来 TuyaOpen Framework极客创意大赛正式开启

#include <iostream>
#include <unordered_map>
using namespace std;

int main() {
int n;
cin >> n;
unordered_map<int, int> count;

for (int i = 1; i <= n; i++) {
int id;
cin >> id;
count[id]++;
}

int changes = 0;
int a = 0;
int b = 0;
for (auto& c : count) {
int cnt = c.second;
if (cnt > 2) {
a+= cnt - 2;
} else if (cnt == 1) {
b++;
}
}
if(a >= b) changes = a;
else changes = (a + b) / 2;

cout << changes << endl;

return 0;
}

unordered_map<int, int> count :

来统计每个同学的 ID 出现的次数。unordered_map 用来存储每个 ID 及其出现次数。

使用两个变量 ab 来分别统计不同情况:

  • a 记录出现次数大于 2 的 ID 需要修改的次数。比如某个 ID 出现了 4 次,我们需要修改 2 次(使其出现 2 次)。
  • b 记录出现次数为 1 的 ID 的数量。对于这些 ID,我们需要通过修改其它 ID 来配对。

关键点:

  • 如果出现次数大于 2 的 ID 数量 a 大于或等于出现次数为 1 的 ID 数量 b,那么修改次数就是 a
  • 如果 a 小于 b,那么修改次数是 (a + b) / 2。这是因为 a 个多余的部分可以和 b 个需要配对的部分进行配对,剩下的(b-a)需要进一步修改,就是 a + (b - a)/ 2
举报

相关推荐

0 条评论