看 a a a 数组的数据范围,只有 100 100 100 以内,考虑桶排序,用一个 s s s 数组统计某数字在 a a a 数组中出现的次数,如果 s i > c s_i>c si>c,显然花费 c c c 一次性删除所有的 i i i 比花费 s i s_i si 一个一个删除 i i i 要花费的更少,而如果 s i < c s_i<c si<c,则花费 s i s_i si 删除 i i i 更优。
代码如下:
#include <bits/stdc++.h>
using namespace std;
int t, n, c, s[101], a, ans;
int main() {
cin >> t;
while (t--) {
cin >> n >> c;
memset(s, 0, sizeof(s));
for (int i = 1; i <= n; i++) {
cin >> a;
s[a]++;
}
ans = 0;
for (int i = 1; i <= 100; i++)
if (s[i] > c)
ans += c;
else
ans += s[i];
cout << ans << '\n';
}
return 0;
}