求助!!求HACK样例或者指点迷津
  • 板块CF2021B Maximize Mex
  • 楼主x1uc
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/12/17 21:59
  • 上次更新2024/12/18 14:59:17
查看原帖
求助!!求HACK样例或者指点迷津
648695
x1uc楼主2024/12/17 21:59

不知道为什么无法通过,想请大佬给出我程序的漏洞

#include <bits/stdc++.h>
using namespace std;

void solve() {
    int n, m;
    cin >> n >> m;

    vector<int> arr(n);
    for (int i = 0; i < n; ++i) {
        cin >> arr[i];
    }

    sort(arr.begin(), arr.end());  // 对数组排序

    unordered_map<int, int> nowMap;
    int now = 0;  // MEX 值
    int i = 0;

    for (i = 0; i < n; i++) {
        int cur = arr[i];
        int curMod = cur % m;  // 当前数对 m 取模的结果
        int temp = now % m;    // 当前 MEX 值对 m 取模的结果

        if (cur != now) {  // 如果当前元素和 MEX 值不相等,进行处理
            if (nowMap[temp] > 0) {  // 检查当前 MEX % m 是否可以递增
                nowMap[temp]--;
                nowMap[curMod]++;
                now++;
                continue;
            }
            if (now < arr[i]) {  // 无法增加 MEX 值
                break;
            } else {  // 将当前数的模数增加到 map
                nowMap[curMod]++;
                if (nowMap[temp] > 0) {
                    nowMap[temp]--;
                    now++;
                }
            }
        } else {  // 如果 arr[i] 等于当前 MEX 值,直接增加 MEX
            now++;
        }
    }

    // 处理剩余的可以递增的元素
    while (nowMap[now % m] > 0) {
        nowMap[now % m]--;
        now++;
    }

    cout << now << "\n";
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int t;
    cin >> t;
    while (t--) {
        solve();
    }

    return 0;
}

2024/12/17 21:59
加载中...