1 条题解

  • 0
    @ 2025-10-26 18:44:04

    题解

    非常抱歉,我不知道默认显示的是英文题面,上面可以换语言应该没人看不到吧(

    ZZ 表示区间 [0,k1][0, k-1]在数组中缺失的整数个数,令 CC 表示数组中等于 kk 的元素个数

    为了使 MEX(a)=k\text{MEX}(a) = k,必须满足以下条件:

    • 区间 [0,k1][0, k-1] 中的每个数都出现,这需要进行 ZZ 次操作来补全;
    • 数字 kk 不得出现在数组中,因此需要进行 CC 次操作来删除这些元素。

    在删除值为 kk 的元素时,我们可以直接用缺失的数来替换它们,因此总的最小操作次数是这两个值中的较大者。

    因此,答案为: ans=max(Z,C)\text{ans} = \max(Z, C)

    时间复杂度为 O(n)O(n)

    Code:

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
      int t;
      cin >> t;
      while(t--){
        int n, k;
        cin >> n >> k;
        vector<int> arr(n+1);
        vector<int> cnt(n+1,0);
        for (int i = 1;i<=n;i++){
          cin >> arr[i];
          cnt[arr[i]]++;
        } 
        int op = 0;
        for (int i = 0;i<k;i++){
          if (cnt[i]==0){
            op++;
          }
        }
        if (n==k) cout << op<<endl;
        else cout << max(cnt[k],op)<<endl;
      }
      
      return 0;
    }
    
    • 1

    [2025 实验室二面] 无语,跟你说不下去,典型的特大男人思维

    信息

    ID
    1105
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    104
    已通过
    23
    上传者