P16460 [UOI 2026] Minimum Deletion 题解
一道较水的关于 \(mex\) 也就是最小的未出现的非负整数的题目。
题意大概是这样的:给你一个长度为 \(n\) 的数组,问使该数组的 \(mex\) 值小于等于 \(k\) 要删除最少几个数。
显然比 \(k\) 大的数对答案不起影响,那么我们只考虑小于等于 \(k\) 的数。根据 \(mex\) 的定义,如果 \(0\) 到 \(k\) 中任一数的出现次数为 \(0\),该数组的 \(mex\) 值就不会超过 \(k\)。
答案就直接出来了,因为要使 \(0\) 到 \(k\) 中任一数的出现次数为 \(0\),所以只要把其中出现次数最少的数全部删掉,其出现次数就是答案。
#include<bits/stdc++.h>
using namespace std;//参考代码
int t[15];//桶数组
int main(){
std::ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int n,k;
cin>>n>>k;
for(int i=1;i<=n;i++){
int x;
cin>>x;
t[x]++;//放到桶数组里
}
int mn=10000;
for(int i=0;i<=k;i++){
mn=min(mn,t[i]);//取0到k出现次数的最小值
}
cout<<mn;
return 0;
}

浙公网安备 33010602011771号