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;
}
posted @ 2026-10-17 21:06  SCX2014  阅读(1)  评论(0)    收藏  举报